2017-12-03 22 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

SO 나던 일, 당신의 코드가 무엇을 여기에 예제 조각입니까? 너 뭐 해봤 니? – Esperento57

+0

안녕하세요 안녕 esperento, 사실 나는 그 당시에 나와 함께 코드를 가지고 있지 않았기 때문에 나는 그것을 업로드 할 수 없었습니다. 그러나 이제 나는 질문을 편집했고 코드를 업로드했습니다. 나는 구글에서 검색했으나 작동하지 않습니다. 그래서 제발 도와 줘요. – SRP

답변

1

한 가지 방법은 모든 .NET 응용 프로그램에서와 마찬가지로 ADO.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(); 

는 연결 문자열에 User ID=YourSqlLogin;Password=YourSqlLoginPassword를 지정, SQL 인증을 사용하여 쿼리를 실행합니다.

$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 문장의 경우

는 각각 별도의 레코드를 반환합니다. 이것은 당신이 더 이상 레코드를 사용할 수없는 경우 false를 반환하는하는 DataReader를 사용하는 경우 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; 
} 

또한 열 및 데이터 유형의 개수가 동일한 경우 UNION ALL를 사용하여 하나의 결과 집합에 결과를 연결하는 당신의 SQL 쿼리를 조정할 수 있습니다.

$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

안녕 Dan Guzman, 두 개의 다른 데이터베이스에있는 테이블에서 항목을 삭제할 수 있습니까? , 예를 들어 두 개의 다른 데이터베이스 이름을주는 시도처럼 - 초기 카탈로그 = "DB1", "DB2"하지만 오류가 날주고있다. 다른 DB에서 항목을 삭제하기 위해 동일한 코드를 다시 반복하는 대신 다른 데이터베이스에 대한 코드를 어떻게 추가해야합니까? – 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"인수 "열기"를 호출 예외를 말하는 "사용자 'XYZ'에 대한 로그인이 실패했습니다. 나는 또한 사용자 이름 SQLServer가 설치된 원격 컴퓨터 용입니다 위의 사용자 이름과 암호는 SQLServer가 설치된 원격 컴퓨터를위한 것이며 SQLServer의 자격 증명을 제공해야한다면 어디서 어떻게 제공해야합니까? – SRP

+0

안녕 Esperento57, 테이블에서 두 개의 다른 데이터베이스에있는 항목을? 예를 들어, 두 개의 다른 데이터베이스 이름을주는 시도했다 - 초기 카탈로그 = "DB1", "DB2"하지만 그것은 오류가 있습니다. 어떻게 다른 데이터베이스에 대한 코드를 추가해야합니까? 다른 DB로부터 엔트리를 삭제하기 위해 다시 같은 코드를 반복합니다. – SRP

+0

아니요, Dan Guzman이 제시 한 위의 대답을 주석에서 성공적으로 삭제하면 두 개의 서로 다른 dat에있는 테이블의 항목을 삭제할 수 있습니다 데이터베이스가 동일한 서버에 있습니다. – SRP