2016-07-29 1 views
0

Powershell을 통해 MSSQL DB에 대한 가져 오기 스크립트를 생성하고 싶습니다 (this question 관련). 나는이 일을 시도 :Powershell SMO :이 방법은 데이터 스크립팅을 지원하지 않습니다

#Set-ExecutionPolicy RemoteSigned 

$DB_NAME = "<<dbName>>" 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 

$srv = new-object "Microsoft.SqlServer.Management.SMO.Server" "<<server>>" 
$conContext = $srv.ConnectionContext 
$conContext.LoginSecure = $false 
$conContext.Login = "<<user>>" 
$conContext.Password = "<<password>>" 
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conContext) 
$srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.View], "IsSystemObject") 

$db = $srv.databases[$DB_NAME] 

$scripter = new-object "Microsoft.SqlServer.Management.Smo.Scripter" $srv 

$scripter.Options.ScriptSchema = $false 
$scripter.Options.ScriptData = $true 
$scripter.Options.ScriptDrops = $false 

$scripter.Script($db) 

그러나 실행이 오류가 발생합니다 :

"This method does not support scripting data" 

가 나는 또한 출력 파일 옵션을 설정하려고 노력을하지만 아무것도 변경되지 않습니다.

내가 잘못한 것을 말해 줄 수 있습니까?

감사합니다.

답변

2

오류에 따라 Scripter.Script은 스크립팅 데이터를 지원하지 않습니다. 이것은 documented입니다. 무엇 문서화되어 있지 않습니다 당신이 대신 사용하기로되어있는 것입니다,하지만 EnumScript입니다 :

$scripter.EnumScript(@($db.Tables)) 

당신은 단순히 기술적으로, 데이터베이스 자체는 더 들어 있으므로 (아무것도 얻을 수 없습니다 데이터베이스를 스크립팅하기 때문에, 테이블을 통과해야합니다 데이터, 그 테이블 않습니다).

(즉 어떤 EnumScript 예상하는을의 이후 @() 강제 배열에 Tables 수집을 변환합니다.) 당신의 좋은 답변

+0

안녕과 감사를! 내 문제를 해결할 수있는 것 같습니다. 불행히도 지금이 오류가 발생합니다 : "EnumScript"1 인수 (en) : "서버 'xxx'스크립트에 실패했습니다." ... + $ scripter.EnumScript (@ ($ db.Tables)) + ~~~~~~~~~~~ + CategoryInfo : NotSpecified : (:) [], MethodInvocationException + FullyQualifiedErrorId : FailedOperationException이 예외의 원인을 알고 있습니까? 인사말! –

+0

아니요. EnumScript 자체와는 아무런 관련이 없습니다.이 코드가 도달 가능한 데이터베이스 인스턴스에 대해 작동하는지 확인했기 때문에 알았습니다. –

+0

안녕하세요 - 무엇이 잘못되었는지 fugured : $ scripter.Options.ScriptSchema = $ false를 설정하는 데 사용하고 싶지만 스키마가 없으면이 오류가 발생합니다. 데이터를 스크립팅하는 방법이 있습니까? 그리고 외래 키와 충돌이 발생하지 않도록 테이블을 정렬해야합니다. 현재 테이블은 알파벳순으로 스크립팅되어 있지만 빈 DB로 가져올 때 오류가 발생합니다. –

관련 문제