Invoke-Sqlcmd cmdlet
Invoke-Sqlcmd는 언어(Transact-SQL 및 XQuery)의 문과 sqlcmd 유틸리티에서 지원하는 명령이 포함된 스크립트를 실행하는 SQL Server cmdlet입니다.
Invoke-Sqlcmd 사용
Invoke-Sqlcmd cmdlet을 사용하여 sqlcmd 스크립트 파일을 Windows PowerShell 환경에서 실행할 수 있습니다. sqlcmd 를 사용하여 수행할 수 있는 대부분의 작업은 Invoke-Sqlcmd로도 수행할 수 있습니다.
다음은 Invoke-Sqlcmd를 호출하여 간단한 쿼리를 실행하는 예제입니다. 이 예제는 sqlcmd 에 -Q 및 -S 옵션을 지정하는 것과 유사합니다.
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
다음은 Invoke-Sqlcmd를 호출하고 입력 파일을 지정한 후 출력을 파일로 파이핑하는 예제입니다. 이 예제는 sqlcmd 에 -i 및 -o 옵션을 지정하는 것과 유사합니다.
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"
다음은 Windows PowerShell 배열을 사용하여 여러 sqlcmd 스크립팅 변수를 Invoke-Sqlcmd로 전달하는 예제입니다. SELECT 문에서 sqlcmd 스크립팅 변수를 식별하는 "$" 문자는 PowerShell 역따옴표(`) 이스케이프 문자를 사용하여 이스케이프 처리되었습니다.
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
Windows PowerShell SQL Server 공급자를 사용하여 데이터베이스 엔진의 instance 이동한 다음, Windows PowerShell Get-Item cmdlet을 사용하여 instance 대한 SMO Server 개체를 검색하고 Invoke-Sqlcmd에 전달하는 예제입니다.
Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)
-Query 매개 변수는 위치 매개 변수이며 이름을 지정할 필요가 없습니다. Invoke-Sqlcmd에 전달된 첫 번째 문자열은 명명되지 않은 경우 -Query 매개 변수로 취급됩니다.
Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Invoke-Sqlcmd의 경로 컨텍스트
-Database 매개 변수를 사용하지 않는 경우 Invoke-Sqlcmd에 대한 데이터베이스 컨텍스트는 cmdlet을 호출할 때 활성화된 경로에 의해 설정됩니다.
경로 | 데이터베이스 컨텍스트 |
---|---|
SQLSERVER: 이외의 드라이브로 시작 | 로컬 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다. |
SQLSERVER:\SQL | 로컬 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다. |
SQLSERVER:\SQL\ComputerName | 지정된 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다. |
SQLSERVER:\SQL\ComputerName\InstanceName | 지정된 컴퓨터에 있는 지정된 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다. |
SQLSERVER:\SQL\ComputerName\InstanceName\Databases | 지정된 컴퓨터에 있는 지정된 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다. |
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName | 지정된 컴퓨터에 있는 지정된 인스턴스의 지정된 데이터베이스입니다. 이는 또한 데이터베이스 내의 테이블 및 열 노드를 지정하는 경로와 같은 보다 긴 경로에 적용됩니다. |
예를 들어 로컬 컴퓨터의 기본 인스턴스에 있는 Windows 계정에 대한 기본 데이터베이스가 master라고 가정합니다. 이 경우 다음 명령에서 master를 반환합니다.
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
다음 명령은 AdventureWorks2012를 반환합니다.
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Invoke-Sqlcmd에서 경로 데이터베이스 컨텍스트를 사용하는 경우 경고를 제공합니다. -SuppressProviderContextWarning 매개 변수를 사용하여 경고 메시지를 해제할 수 있습니다. -IgnoreProviderContext 매개 변수를 사용하여 Invoke-Sqlcmd에서 로그인에 대한 기본 데이터베이스를 항상 사용하도록 지정할 수 있습니다.
Invoke-Sqlcmd와 sqlcmd 유틸리티 비교
Invoke-Sqlcmd 를 사용하면 sqlcmd 유틸리티로 실행할 수 있는 대부분의 스크립트를 실행할 수 있습니다. 하지만 Invoke-Sqlcmd 는 sqlcmd 가 실행되는 명령 프롬프트 환경과는 다른 Windows PowerShell 환경에서 실행됩니다. Invoke-Sqlcmd 의 동작은 Windows PowerShell 환경에서 작동하도록 수정되었습니다.
모든 sqlcmd 명령이 Invoke-Sqlcmd에서 구현되는 것은 아닙니다. 구현되지 않는 명령으로는 :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, :serverlist등이 있습니다.
Invoke-Sqlcmd 는 sqlcmd 환경 변수 또는 스크립팅 변수(예: SQLCMDDBNAME, SQLCMDWORKSTATION)를 초기화하지 않습니다.
Invoke-Sqlcmd 는 Windows PowerShell -Verbose 공통 매개 변수를 지정해야 PRINT 문 출력과 같은 메시지를 표시합니다. 예를 들면 다음과 같습니다.
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
모든 sqlcmd 매개 변수가 PowerShell 환경에서 필요한 것은 아닙니다. 예를 들어 Windows PowerShell은 cmdlet의 모든 출력 서식을 지정하므로 서식 옵션을 지정하는 sqlcmd 매개 변수는 Invoke-Sqlcmd에서 구현되지 않습니다. 다음 표에서는 Invoke-Sqlcmd 매개 변수와 sqlcmd 옵션 간의 관계를 보여 줍니다.
Description | sqlcmd 옵션 | Invoke-Sqlcmd 매개 변수 |
---|---|---|
서버 및 인스턴스 이름 | -S | -ServerInstance |
사용할 초기 데이터베이스 | -d | -Database |
지정된 쿼리 실행 후 종료 | -Q | -Query |
SQL Server 인증 로그인 ID입니다. | -U | -Username |
SQL Server 인증 암호입니다. | -P | -Password |
변수 정의 | -v | -Variable |
쿼리 제한 시간 간격 | -t | -QueryTimeout |
오류 발생 시 실행 중지 | -b | -AbortOnError |
관리자 전용 연결 | -A | -DedicatedAdministratorConnection |
대화형 명령, 시작 스크립트 및 환경 변수를 사용하지 않음 | -X | -DisableCommands |
변수 대체를 사용하지 않음 | -X | -DisableVariables |
보고할 최소 심각도 수준 | -v | -SeverityLevel |
보고할 최소 오류 수준 | -M | -ErrorLevel |
로그인 제한 시간 간격 | -l | -ConnectionTimeout |
호스트 이름 | -H | -HostName |
암호 변경 후 종료 | -Z | -NewPassword |
쿼리가 포함된 입력 파일 | -i | -InputFile |
최대 문자 출력 길이 | -w | -MaxCharLength |
최대 이진 출력 길이 | -w | -MaxBinaryLength |
SSL 암호화를 사용하여 연결 | 매개 변수 없음 | -EncryptConnection |
오류 표시 | 매개 변수 없음 | -OutputSqlErrors |
메시지를 stderr로 출력 | -r | 매개 변수 없음 |
클라이언트의 국가별 설정 사용 | -R | 매개 변수 없음 |
지정된 쿼리 실행 후 실행 중인 상태로 유지 | -Q | 매개 변수 없음 |
출력 데이터에 사용할 코드 페이지 | -f | 매개 변수 없음 |
암호 변경 후 실행 중인 상태로 유지 | -Z | 매개 변수 없음 |
패킷 크기 | 지정하지 않을 경우 | 매개 변수 없음 |
열 구분 기호 | -S | 매개 변수 없음 |
출력 헤더 제어 | -H | 매개 변수 없음 |
제어 문자 지정 | -k | 매개 변수 없음 |
고정 길이 표시 너비 | -y | 매개 변수 없음 |
변수 길이 표시 너비 | -y | 매개 변수 없음 |
입력 에코 | -E | 매개 변수 없음 |
따옴표 붙은 식별자 사용 | -I | 매개 변수 없음 |
후행 공백 제거 | -w | 매개 변수 없음 |
인스턴스 나열 | -l | 매개 변수 없음 |
출력을 유니코드 형식으로 지정 | -U | 매개 변수 없음 |
통계 인쇄 | -p | 매개 변수 없음 |
명령 종료 | -c | 매개 변수 없음 |
Windows 인증을 사용하여 연결 | -E | 매개 변수 없음 |