Invoke-Sqlcmd cmdletInvoke-Sqlcmd cmdlet

Invoke-SqlcmdSQL ServerSQL Server 및 XQuery 언어로 된 문과 Transact-SQLTransact-SQL sqlcmd 유틸리티에서 지원되는 명령이 포함된 스크립트를 실행하는 cmdlet입니다.Invoke-Sqlcmd is a SQL ServerSQL Server cmdlet that runs scripts that CONTAIN statements from the languages ( Transact-SQLTransact-SQL and XQuery) and commands supported by the sqlcmd utility.

Invoke-Sqlcmd 사용Using Invoke-Sqlcmd

Invoke-Sqlcmd cmdlet을 사용하여 sqlcmd 스크립트 파일을 Windows PowerShell 환경에서 실행할 수 있습니다.The Invoke-Sqlcmd cmdlet lets you run your sqlcmd script files in a Windows PowerShell environment. sqlcmd 를 사용하여 수행할 수 있는 대부분의 작업은 Invoke-Sqlcmd로도 수행할 수 있습니다.Much of what you can do with sqlcmd can also be done using Invoke-Sqlcmd.

다음은 Invoke-Sqlcmd를 호출하여 간단한 쿼리를 실행하는 예제입니다. 이 예제는 sqlcmd-Q-S 옵션을 지정하는 것과 유사합니다.This is an example of calling Invoke-Sqlcmd to execute a simple query, similar to specifying sqlcmd with the -Q and -S options:

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

다음은 Invoke-Sqlcmd를 호출하고 입력 파일을 지정한 후 출력을 파일로 파이핑하는 예제입니다. 이 예제는 sqlcmd-i-o 옵션을 지정하는 것과 유사합니다.This is an example of calling Invoke-Sqlcmd, specifying an input file and piping the output to a file This is similar to specifying sqlcmd with the -i and -o options:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"  

다음은 Windows PowerShell 배열을 사용하여 여러 sqlcmd 스크립팅 변수를 Invoke-Sqlcmd로 전달하는 예제입니다.This is an example of using a Windows PowerShell array to pass multiple sqlcmd scripting variables to Invoke-Sqlcmd. SELECT 문에서 sqlcmd 스크립팅 변수를 식별하는 "$" 문자는 PowerShell 역따옴표(`) 이스케이프 문자를 사용하여 이스케이프 처리되었습니다.The "$" characters identifying the sqlcmd scripting variables in the SELECT statement have been escaped by using the PowerShell back-tick "`" escape character:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

다음은 Windows PowerShell의 SQL ServerSQL Server 공급자를 사용하여 데이터베이스 엔진Database Engine인스턴스로 이동한 다음 Windows PowerShell Get-Item cmdlet을 사용하여 해당 인스턴스에 대한 SMO Server 개체를 가져와 Invoke-Sqlcmd로 전달하는 예제입니다.This is an example of using the SQL ServerSQL Server provider for Windows PowerShell to navigate to an instance of the 데이터베이스 엔진Database Engine, and then using the Windows PowerShell Get-Item cmdlet to retrieve the SMO Server object for the instance and passing it to Invoke-Sqlcmd:

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance  
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)  

-Query 매개 변수는 위치 매개 변수이며 이름을 지정할 필요가 없습니다.The -Query parameter is positional and does not have to be named. Invoke-Sqlcmd에 전달된 첫 번째 문자열은 명명되지 않은 경우 -Query 매개 변수로 취급됩니다.If the first string that is passed to Invoke-Sqlcmd: is unnamed, it is treated as the -Query parameter.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Invoke-Sqlcmd의 경로 컨텍스트Path Context in Invoke-Sqlcmd

-Database 매개 변수를 사용하지 않는 경우 Invoke-Sqlcmd에 대한 데이터베이스 컨텍스트는 cmdlet을 호출할 때 활성화된 경로에 의해 설정됩니다.If you do not use the -Database parameter, the database context for Invoke-Sqlcmd is set by the path that is active when the cmdlet is called.

경로Path 데이터베이스 컨텍스트Database Context
SQLSERVER: 이외의 드라이브로 시작Starts with a drive other than SQLSERVER: 로컬 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다.The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQLSQLSERVER:\SQL 로컬 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다.The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQL\ComputerNameSQLSERVER:\SQL\ComputerName 지정된 컴퓨터에 있는 기본 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다.The default database for the login ID in the default instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceNameSQLSERVER:\SQL\ComputerName\InstanceName 지정된 컴퓨터에 있는 지정된 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다.The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceName\DatabasesSQLSERVER:\SQL\ComputerName\InstanceName\Databases 지정된 컴퓨터에 있는 지정된 인스턴스의 로그인 ID에 대한 기본 데이터베이스입니다.The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseNameSQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName 지정된 컴퓨터에 있는 지정된 인스턴스의 지정된 데이터베이스입니다.The specified database in the specified instance on the specified computer. 이는 또한 데이터베이스 내의 테이블 및 열 노드를 지정하는 경로와 같은 보다 긴 경로에 적용됩니다.This also applies to longer paths, such as a path that specifies the Tables and Columns node within a database.

예를 들어 로컬 컴퓨터의 기본 인스턴스에 있는 Windows 계정에 대한 기본 데이터베이스가 master라고 가정합니다.For example, assume that the default database for your Windows account in the default instance of the local computer is master. 이 경우 다음 명령에서 masteR을 반환합니다.Then, the following commands would return master:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

다음 명령에서 AdventureWorks2012AdventureWorks2012를 반환합니다.The following commands would return AdventureWorks2012AdventureWorks2012:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Invoke-Sqlcmd에서 경로 데이터베이스 컨텍스트를 사용하는 경우 경고를 제공합니다.Invoke-Sqlcmd provides a warning when it uses the path database context. -SuppressProviderContextWarning 매개 변수를 사용하여 경고 메시지를 해제할 수 있습니다.You can use the -SuppressProviderContextWarning parameter to turn off the warning message. -IgnoreProviderContext 매개 변수를 사용하여 Invoke-Sqlcmd에서 로그인에 대한 기본 데이터베이스를 항상 사용하도록 지정할 수 있습니다.You can use the -IgnoreProviderContext parameter to tell Invoke-Sqlcmd to always use the default database for the login.

Invoke-Sqlcmd와 sqlcmd 유틸리티 비교Comparing Invoke-Sqlcmd and the sqlcmd Utility

Invoke-Sqlcmd 를 사용하면 sqlcmd 유틸리티로 실행할 수 있는 대부분의 스크립트를 실행할 수 있습니다.Invoke-Sqlcmd can be used to run many of the scripts that can be run using the sqlcmd utility. 하지만 Invoke-Sqlcmdsqlcmd 가 실행되는 명령 프롬프트 환경과는 다른 Windows PowerShell 환경에서 실행됩니다.However, Invoke-Sqlcmd runs in a Windows PowerShell environment which is different than the command prompt environment that sqlcmd is run in. Invoke-Sqlcmd 의 동작은 Windows PowerShell 환경에서 작동하도록 수정되었습니다.The behavior of Invoke-Sqlcmd has been modified to work in a Windows PowerShell environment.

모든 sqlcmd 명령이 Invoke-Sqlcmd에서 구현되는 것은 아닙니다.Not all of the sqlcmd commands are implemented in Invoke-Sqlcmd. 구현되지 않는 명령으로는 :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, :serverlist등이 있습니다.Commands that are not implemented include the following: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, and :serverlist.

Invoke-Sqlcmdsqlcmd 환경 변수 또는 스크립팅 변수(예: SQLCMDDBNAME, SQLCMDWORKSTATION)를 초기화하지 않습니다.Invoke-Sqlcmd does not initialize the sqlcmd environment or scripting variables such as SQLCMDDBNAME or SQLCMDWORKSTATION.

Invoke-Sqlcmd 는 Windows PowerShell -Verbose 공통 매개 변수를 지정해야 PRINT 문 출력과 같은 메시지를 표시합니다.Invoke-Sqlcmd does not display messages, such as the output of PRINT statements, unless you specify the Windows PowerShell -Verbose common parameter. 예를 들어For example:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

모든 sqlcmd 매개 변수가 PowerShell 환경에서 필요한 것은 아닙니다.Not all of the sqlcmd parameters are needed in a PowerShell environment. 예를 들어 Windows PowerShell은 cmdlet의 모든 출력 서식을 지정하므로 서식 옵션을 지정하는 sqlcmd 매개 변수는 Invoke-Sqlcmd에서 구현되지 않습니다.For example, Windows PowerShell formats all output from cmdlets, so the sqlcmd parameters specifying formatting options are not implemented in Invoke-Sqlcmd. 다음 표에는 Invoke-Sqlcmd 매개 변수와 sqlcmd 옵션 간의 관계가 나와 있습니다.The follwoing table shows the relationship between the Invoke-Sqlcmd parameters and sqlcmd options:

설명Description sqlcmd 옵션sqlcmd option Invoke-Sqlcmd 매개 변수Invoke-Sqlcmd parameter
서버 및 인스턴스 이름Server and instance name. -S-S -ServerInstance-ServerInstance
사용할 초기 데이터베이스The initial database to use. -d-d -Database-Database
지정된 쿼리 실행 후 종료Run the specified query and exit. -Q-Q -Query-Query
SQL ServerSQL Server 인증 로그인 ID Authentication login ID. -U-U -Username-Username
SQL ServerSQL Server 인증 암호 Authentication password. -P-P -Password-Password
변수 정의Variable definition. -v-v -Variable-Variable
쿼리 제한 시간 간격Query timeout interval. -t-t -QueryTimeout-QueryTimeout
오류 발생 시 실행 중지Stop running on an error -b-b -AbortOnError-AbortOnError
관리자 전용 연결Dedicated Administrator Connection. -A-A -DedicatedAdministratorConnection-DedicatedAdministratorConnection
대화형 명령, 시작 스크립트 및 환경 변수를 사용하지 않음Disable interactive commands, startup script, and environment variables. -X-X -DisableCommands-DisableCommands
변수 대체를 사용하지 않음Disable variable substitution. -X-x -DisableVariables-DisableVariables
보고할 최소 심각도 수준Minimum severity level to report. -v-V -SeverityLevel-SeverityLevel
보고할 최소 오류 수준Minimum error level to report. -m-m -ErrorLevel-ErrorLevel
로그인 제한 시간 간격Login timeout interval. -l-l -ConnectionTimeout-ConnectionTimeout
호스트 이름Hostname. -H-H -HostName-HostName
암호 변경 후 종료Change password and exit. -Z-Z -NewPassword-NewPassword
쿼리가 포함된 입력 파일Input file containing a query -i-i -InputFile-InputFile
최대 문자 출력 길이Maximum length of character output. -w-w -MaxCharLength-MaxCharLength
최대 이진 출력 길이Maximum length of binary output. -w-w -MaxBinaryLength-MaxBinaryLength
SSL 암호화를 사용하여 연결Connect using SSL encryption. 매개 변수 없음No parameter -EncryptConnection-EncryptConnection
오류 표시Display errors 매개 변수 없음No parameter -OutputSqlErrors-OutputSqlErrors
메시지를 stderr로 출력Output messages to stderr. -r-r 매개 변수 없음No parameter
클라이언트의 국가별 설정 사용Use client's regional settings -r-R 매개 변수 없음No parameter
지정된 쿼리 실행 후 실행 중인 상태로 유지Run the specified query and remain running. -Q-q 매개 변수 없음No parameter
출력 데이터에 사용할 코드 페이지Code page to use for output data. -f-f 매개 변수 없음No parameter
암호 변경 후 실행 중인 상태로 유지Change a password and remain running -Z-z 매개 변수 없음No parameter
패킷 크기Packet size -A-a 매개 변수 없음No parameter
열 구분 기호Column separator -S-s 매개 변수 없음No parameter
출력 헤더 제어Control output headers -H-h 매개 변수 없음No parameter
제어 문자 지정Specify control characters -k-k 매개 변수 없음No parameter
고정 길이 표시 너비Fixed length display width -Y-Y 매개 변수 없음No parameter
변수 길이 표시 너비Variable length display width -Y-y 매개 변수 없음No parameter
입력 에코Echo input -e-e 매개 변수 없음No parameter
따옴표 붙은 식별자 사용Enable quoted identifiers -i-I 매개 변수 없음No parameter
후행 공백 제거Remove trailing spaces -w-W 매개 변수 없음No parameter
인스턴스 나열List instances -l-L 매개 변수 없음No parameter
출력을 유니코드 형식으로 지정Format output as Unicode -U-u 매개 변수 없음No parameter
통계 인쇄Print statistics -P-p 매개 변수 없음No parameter
명령 종료Command end -c-c 매개 변수 없음No parameter
Windows 인증을 사용하여 연결Connect using Windows Authentication -e-E 매개 변수 없음No parameter

참고 항목See also

데이터베이스 엔진 cmdlet 사용 Use the Database Engine cmdlets
sqlcmd 유틸리티 sqlcmd Utility
sqlcmd 유틸리티 사용 Use the sqlcmd Utility