한 가지 방법은 모든 .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);
SO 나던 일, 당신의 코드가 무엇을 여기에 예제 조각입니까? 너 뭐 해봤 니? – Esperento57
안녕하세요 안녕 esperento, 사실 나는 그 당시에 나와 함께 코드를 가지고 있지 않았기 때문에 나는 그것을 업로드 할 수 없었습니다. 그러나 이제 나는 질문을 편집했고 코드를 업로드했습니다. 나는 구글에서 검색했으나 작동하지 않습니다. 그래서 제발 도와 줘요. – SRP