[SQL] 어떻게 PowerShell을 사용 .SQL 파일을 실행하려면?
SQL어떻게 PowerShell을 사용 .SQL 파일을 실행하려면?
나는 .SQL 파일이 있습니다. 나는 파워 쉘 스크립트를 통해 및 .SQL 파일 된 invoke 연결 문자열 정보를 전달하려합니다.
내가 검색했고 호출-SQLCMD 관련된 cmdlet을 함께했다. 내가 SQL에 해당하는 모듈을 찾기 위해 노력하고있는 동안, 나는 내 컴퓨터에 하나를 찾을 수 없습니다.
나는 내 컴퓨터에 아무것도 설치해야합니다 (기계는 이미 SQL Server 관리 Studio 2008 R2는있다) 모듈을 얻기 위해 또는 PowerShell을 사용 .SQL 파일을 실행할 수있는 쉬운 방법은 무엇입니까?
해결법
-
==============================
1.SQL 스냅인이 존재하는지 확인하십시오 :
SQL 스냅인이 존재하는지 확인하십시오 :
get-pssnapin -Registered Name : SqlServerCmdletSnapin100 PSVersion : 2.0 Description : This is a PowerShell snap-in that includes various SQL Server cmdlets. Name : SqlServerProviderSnapin100 PSVersion : 2.0 Description : SQL Server Provider
그렇다면
Add-PSSnapin SqlServerCmdletSnapin100 # here lives Invoke-SqlCmd Add-PSSnapin SqlServerProviderSnapin100
당신은 이런 식으로 뭔가를 할 수 :
invoke-sqlcmd -inputfile "c:\mysqlfile.sql" -serverinstance "servername\serverinstance" -database "mydatabase" # the parameter -database can be omitted based on what your sql script does.
-
==============================
2.MSDN에 가져 SQLPS 모듈에서 인용,
MSDN에 가져 SQLPS 모듈에서 인용,
그래서, 그래, 당신은 기독교에 의해 설명 추가 - PSSnapin 접근 방식을 사용할 수 있지만 SQLPS 권장 모듈 접근 방식을 감사하는 것이 유용하다.
당신은 단순히 가져 오기 - 모듈 SQLPS를 통해 (일반적으로 프로필에) 다른 같은 모듈을로드 할 수 있도록 SQLPS은 설치에 포함되어 있습니다 : 가장 간단한 경우는 SQL 서버 2012 있다고 가정합니다. 모듈 가져 오기 모듈 -ListAvailable와 시스템에 사용할 수 있는지 확인할 수 있습니다.
당신은 SQL 서버 2012이없는 경우, 모든 당신이 할 필요는 GET-모듈 / 가져 오기 - 모듈을 찾을 수 있도록 SQLPS이 모듈 디렉토리에 모듈 다운로드 할 수 있습니다. 호기심, 마이크로 소프트는 다운로드 할 수있는이 모듈을하지 않습니다! 그러나, 차드 밀러는 친절하게 필요한 조각을 포장이 모듈 다운로드를 제공하고 있습니다. 당신의 ... 문서 \의 WindowsPowerShell \ 모듈 디렉토리 아래 및 가져 오기를 진행 그것의 압축을 풉니 다.
이 모듈 접근 방식과 스냅인 방식이 동일하지 않은 것을주의하는 것이 재미있다. 그런 다음 가져 오기-PSSnapin 실행 스냅인 (snapin)합니다 (-registered 매개 변수없이 넣은 것만 보여주기)를로드하는 경우에는 SQL 스냅인 (snapin)를 볼 수 있습니다. 반면에, 당신은로드하면 SQLPS는 GET-PSSnapin에서, 스냅인 (snapin)가로드 표시되지 않습니다 다양한 블로그 항목 있도록에만 검사 스냅인 (snapin)에 의해 호출-SQLCMD cmdlet의 검사가 위음성 결과를 제공 할 수 있다는 모듈.
2012년 10월 6일 업데이트
SQLPS 모듈 대에 전체 이야기를 들어 SQL 서버 대 SQLPS 미니 쉘 스냅인을 최근 Simple-Talk.com에 게시 된 내 두 부분으로 SQL 서버 개발자를위한 미니 시리즈 실용 PowerShell 및 DBA를 살펴보고 내가 가지고있는 경우, 한 독자의 의견에 따라, 성공적으로 문제를 "드 혼란". :-)
-
==============================
3.
if(Test-Path "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS") { #Sql Server 2012 Import-Module SqlPs -DisableNameChecking C: # Switch back from SqlServer } else { #Sql Server 2008 Add-PSSnapin SqlServerCmdletSnapin100 # here live Invoke-SqlCmd } Invoke-Sqlcmd -InputFile "MySqlScript.sql" -ServerInstance "Database name" -ErrorAction 'Stop' -Verbose -QueryTimeout 1800 # 30min
-
==============================
4.여기에 내가로드 SQL 스냅인 (snapin) 내 PowerShell 프로필에 가지고있는 기능은 다음과 같습니다
여기에 내가로드 SQL 스냅인 (snapin) 내 PowerShell 프로필에 가지고있는 기능은 다음과 같습니다
function Load-SQL-Server-Snap-Ins { try { $sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps" if (!(Test-Path $sqlpsreg -ErrorAction "SilentlyContinue")) { throw "SQL Server Powershell is not installed yet (part of SQLServer installation)." } $item = Get-ItemProperty $sqlpsreg $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path) $assemblyList = @( "Microsoft.SqlServer.Smo", "Microsoft.SqlServer.SmoExtended", "Microsoft.SqlServer.Dmf", "Microsoft.SqlServer.WmiEnum", "Microsoft.SqlServer.SqlWmiManagement", "Microsoft.SqlServer.ConnectionInfo ", "Microsoft.SqlServer.Management.RegisteredServers", "Microsoft.SqlServer.Management.Sdk.Sfc", "Microsoft.SqlServer.SqlEnum", "Microsoft.SqlServer.RegSvrEnum", "Microsoft.SqlServer.ServiceBrokerEnum", "Microsoft.SqlServer.ConnectionInfoExtended", "Microsoft.SqlServer.Management.Collector", "Microsoft.SqlServer.Management.CollectorEnum" ) foreach ($assembly in $assemblyList) { $assembly = [System.Reflection.Assembly]::LoadWithPartialName($assembly) if ($assembly -eq $null) { Write-Host "`t`t($MyInvocation.InvocationName): Could not load $assembly" } } Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0 Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30 Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000 Push-Location if ((Get-PSSnapin -Name SqlServerProviderSnapin100 -ErrorAction SilentlyContinue) -eq $null) { cd $sqlpsPath Add-PsSnapin SqlServerProviderSnapin100 -ErrorAction Stop Add-PsSnapin SqlServerCmdletSnapin100 -ErrorAction Stop Update-TypeData -PrependPath SQLProvider.Types.ps1xml Update-FormatData -PrependPath SQLProvider.Format.ps1xml } } catch { Write-Host "`t`t$($MyInvocation.InvocationName): $_" } finally { Pop-Location } }
-
==============================
5.2008 Server 2008 및 2008 R2와
2008 Server 2008 및 2008 R2와
Add-PSSnapin -Name SqlServerCmdletSnapin100, SqlServerProviderSnapin100
2012 년과 2014 년에
Push-Location Import-Module -Name SQLPS -DisableNameChecking Pop-Location
from https://stackoverflow.com/questions/10894688/how-to-execute-sql-file-using-powershell by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] IN 연산자를 사용하는 변수를 정의 (T-SQL) (0) | 2020.04.24 |
---|---|
[SQL] 실행 SELECT 문을 죽이는 방법 (0) | 2020.04.24 |
[SQL] 페이징 SQL Server 2005의 결과 (0) | 2020.04.23 |
[SQL] 은 "@"기호는 SQL의 기능은 무엇입니까? (0) | 2020.04.23 |
[SQL] 존재하지 않는 경우 어떻게하면 테이블의 행을 갱신 또는 삽입합니까? (0) | 2020.04.23 |