다음을 통해 공유


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-Sqlcmdsqlcmd 가 실행되는 명령 프롬프트 환경과는 다른 Windows PowerShell 환경에서 실행됩니다. Invoke-Sqlcmd 의 동작은 Windows PowerShell 환경에서 작동하도록 수정되었습니다.

모든 sqlcmd 명령이 Invoke-Sqlcmd에서 구현되는 것은 아닙니다. 구현되지 않는 명령으로는 :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, :serverlist등이 있습니다.

Invoke-Sqlcmdsqlcmd 환경 변수 또는 스크립팅 변수(예: 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 매개 변수 없음

참고 항목

데이터베이스 엔진 cmdlet 사용
sqlcmd 유틸리티
sqlcmd 유틸리티 사용