source

파워셸에서 sqlcmd를 실행하는 방법?

lovecheck 2023. 10. 9. 23:23
반응형

파워셸에서 sqlcmd를 실행하는 방법?

powershell에 native sqlcmd 명령어가 포함된 문자열이 있습니다.명령 자체는 cmd.exe에서 성공적으로 실행될 수 있습니다.저는 그들을 파워셸에서 실행하는 데 어려움이 있습니다.누가 도와줄 수 있습니까?감사해요.

이것은 sql.sql 입니다.

select @@servername
go
select @@servicename

cmd.exe에서 sqlcmd 명령을 실행할 때의 결과입니다.

C:\Users\test>sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"

--------------------------------------------------
thesimpsons\INSTANCE1

(1 rows affected)

--------------------------------------------------
INSTANCE1

(1 rows affected)

C:\Users\test>

이것은 sqlcmd 명령을 호출하는 파워셸 스크립트입니다.

$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@

Invoke-Command $sql

이 powershell 스크립트를 실행하면 다음과 같은 오류가 발생합니다.

PS C:\TEMP> $sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@

Invoke-Command $sql
Invoke-Command : Parameter set cannot be resolved using the specified named parame
ters.
At line:5 char:15
+ Invoke-Command <<<<  $sql
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBin 
   dingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands 
   .InvokeCommandCommand

호출 연산자를 사용할 Win32 실행 파일을 호출하려면 다음과 같이 하십시오.&다음과 같이:

& sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"

외부 'SQLCMD' 사용을 중지할 수도 있습니다.EXE'와 Invoke-Sqlcmd cmdlet을 대신 사용합니다.

Invoke-Sqlcmd는 언어(Transact-Sql 및 XQuery)의 문과 sqlcmd 유틸리티에서 지원되는 명령이 포함된 스크립트를 실행하는 SQL Server cmdlet입니다.

sqlps' 유틸리티를 열고 실행하기만 하면 됩니다.

Invoke-Sqlcmd -InputFile "C:\temp\sql.sql"

SQL Server PowerShell 실행을 참조하십시오.

Invoke-Sqlcmd'를 사용하기 전에 PowerShell에서 SQL Server 스냅인을 수동으로 로드할 수도 있습니다.
MS SQL Server 2012의 경우 를 실행하여 이를 수행할 수 있습니다.
Import-Module SqlPs

이렇게 해서 스크립트에 외부 명령어를 작성합니다.

$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
                                -U a `
                                -P a `
                                -i `"c:\temp\sql.sql`" }
Invoke-Command -ScriptBlock $scriptBlock

그런 다음 $args 변수를 내부에 사용하고 원격으로 시작할 수도 있습니다.

$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
                                -U a `
                                -P a `
                                -i `"$($args[0])`" }
Invoke-Command -ScriptBlock $scriptBlock -argumentList "c:\temp\sql.sql" -computer "remote1"

비고:

이렇게 하면 각 파라미터에 주석을 달 수 있습니다.

줄 끝에 있는 자리 뒤에 'ㄱ'자와 공백이 없는 것을 잊지 않도록 주의해야 합니다.

사용하다Invoke-Expression보다는Invoke-Command

invoke-command의 첫 번째 위치 매개 변수는 -scriptblock이며 스크립트 블록 인수를 예상합니다.here-string을 이용하여 명령을 작성한 다음 invoke-command로 실행하려면 here-string을 스크립트 블록으로 변환해야 합니다.

$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
 "@

 Invoke-Command ([scriptblock]::create($sql))

인스턴스 이름과 사용자 이름은 모두 정규화되어야 합니다.

<domain_name>\Instanc_name그리고.<domai_name>\Username. 인스턴스 이름만 올바르게 스크립트로 작성되었습니다.

powershell 스크립트 내에서 &operator를 사용하여 sqlcmd를 사용할 때는 샘플을 참조하여 csv 파일을 생성할 수 있습니다.

& cmd /c "sqlcmd -S $sv -i $PROcFILE -s, -v varDB = $dbclean -o $filename"

$sv서버 이름은 다음과 같습니다.SERVERNAME\INSTANCE

$PROCFILE마치d:\TSTSQL\Sqlquery.SQL

$filenamed:\TSTSQL\Desiredoutfilename.CSV

$dbclean는 sql 파일에 전달된 매개 변수입니다.

언급URL : https://stackoverflow.com/questions/9714054/how-to-execute-sqlcmd-from-powershell

반응형