2017-12-03 115 views
0
$uncServer = "\\10.243.174.102\e$" 
$uncFullPath = "$uncServer\New folder\Demo.txt" 
$username = "XYZ" 
$password = "xyz" 

net use $uncServer $password /USER:$username 


$SQLServer = "AP-PUN-SRSTEP29\MSSQLSERVER12" #use Server\Instance for named SQL instances! 
$SQLDBName = "SystemDB" 
$SqlQuery = "Delete * from V_Solution WHERE Notes ='9.4.4'"; 

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" 
#$SqlConnection.open() 


$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 

我在远程服务器上安装了SQL Server 2012,我想从本地机器上使用PowerShell脚本从特定数据库中的特定表中删除一行。有可能做到这一点吗?如何使用PowerShell脚本在SQL Server中的表中删除行?

+2

对你那么不工作,什么是你的代码?你有什么尝试? – Esperento57

+0

哎嗨esperento,其实我也没有跟我的代码在那个时间,所以我不能把它上传,但现在我已经编辑了问题,上传的代码,以及我试图通过在谷歌搜索,但它不工作,所以请帮助我吧。 – SRP

回答

1

一种方法是使用ADO.NET对象,你会在任何.NET应用程序。下面的PowerShell示例不需要安装SQL工具。

要执行使用Windows身份验证查询,在连接字符串中指定Integrated Security=SSPI

$connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=SSPI"; 
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString); 
$command = New-Object System.Data.SqlClient.SqlCommand("DELETE FROM dbo.YourTable WHERE YourTableID = 1", $connection); 
$connection.Open(); 
$rowsDeleted = $command.ExecuteNonQuery(); 
Write-Host "$rowsDeleted rows deleted"; 
$connection.Close(); 

要使用SQL身份验证执行查询,指定连接字符串中User ID=YourSqlLogin;Password=YourSqlLoginPassword

$connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourSqlLogin;Password=YourSqlLoginPassword"; 
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString); 
$command = New-Object System.Data.SqlClient.SqlCommand("DELETE FROM dbo.YourTable WHERE YourTableID = 1", $connection); 
$connection.Open(); 
$rowsDeleted = $command.ExecuteNonQuery(); 
Write-Host "$rowsDeleted rows deleted"; 
$connection.Close(); 

在任一情况下,需要对表DELETE权限。

我不知道在您添加到您的问题脚本NET USE命令的目的,除非这是验证在工作组环境中的服务器。就个人而言,我只是将使用SQL验证,同时删除NET USE丑陋。

编辑:

在多SELECT语句在同一批次的情况下,每个将返回一个单独的记录。这就要求,如果您使用的是DataReader,将返回false,如果没有更多的记录可供调用NextRecordset

$reader = $command.ExecuteReader(); 
do { 
    While($reader.Read()) { 
     #process row here; 
    } 
} while($reader.NextResult()); 

或者,你可以使用DataAdapter来一补“数据集”。该DataSet将包含一个单独的DataTable每个结果集:

$da = New-Object System.Data.SqlClient.SqlDataAdapter($command); 
$ds = New-Object System.Data.DataSet; 
$null = $da.Fill($ds); 
foreach($dt in $ds.Tables) { 
    $dt | Out-GridView; 
} 

你也可以调整你的SQL查询来连接成果转化利用UNION ALL如果列和数据类型的数量是相同的一个结果集。下面是一个例子片断:

$sqlQuery = @(" 
SELECT * 
FROM DB926.dbo.Version_Solution 
WHERE Notes ='9.2.7' 
UNION ALL 
SELECT * 
FROM DB_926.dbo.Version_Solution 
WHERE Notes ='9.2.7'"; 
); 
$command = New-Object System.Data.SqlClient.SqlCommand($sqlQuery, $connection); 
+0

使用上面的代码时也出现同样的错误,并在上面的注释中提到。 – SRP

+0

是的,连我添加的用户ID和密码,在连接字符串,并尝试过了,也被删除,我认为将是必须的,因为SQLServer是安装远程机器上的NET USE的有害代码,并在此之后的所有更改代码是完美的工作,反正感谢你的帮助:-) – SRP

+0

喜丹·古斯曼,是否可以删除存在于两个不同的数据库表中的记录? ,就像我试着为eg-Initial Catalog =“DB1”,“DB2”提供两个不同的数据库名称,但它给了我错误。我应该如何为另一个数据库添加代码,而不是再次重复相同的代码以从其他数据库中删除条目。 – SRP

1

更改你的代码是这样的:

$uncServer = "\\10.243.174.102\e$" 
$uncFullPath = "$uncServer\New folder\Demo.txt" 
$username = "XYZ" 
$password = "xyz" 

net use $uncServer $password /USER:$username 


$SQLServer = "AP-PUN-SRSTEP29\MSSQLSERVER12" #use Server\Instance for named SQL instances! 
$SQLDBName = "SystemDB" 
$SqlQuery = "Delete from V_Solution WHERE Notes ='9.4.4'"; 

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" 
$SqlConnection.open() 


$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 

$SqlCmd.ExecuteNonQuery 
$SqlConnection.Close() 
+0

嗨Esperento57,上面的代码在“$ SqlConnection.open()”中说异常说异常调用“打开”与“0”参数(S)“登录失败的用户'XYZ'我想我也需要给用户名和密码SqlServer以及以上用户名和密码适用于安装SQLServer的远程机器如果我需要提供SQLServer的凭据以及在哪里以及如何给它? – SRP

+0

嗨esperento57,是否有可能删除从两个不同的数据库中存在的表中输入数据,就像我试着为eg-Initial Catalog =“DB1”,“DB2”给出两个不同的数据库名称,但它给了我错误。再次重复相同的代码以删除其他数据库中的条目 – SRP

+0

不可以,可以删除,Dan Guzman在注释中给出的上述答案已成功工作,它删除了两个不同dat中存在的表中的条目降低和数据库在同一台服务器上。 – SRP

相关问题