PowerShell을 사용하여 .sql 파일을 실행하는 방법은 무엇입니까?
나는. sql파일. Powershell 스크립트를 통해 연결 문자열 세부 정보를 전달하고 .sql파일을 호출하려고 합니다.
검색 중 .NET 관련 cmdlet을 찾았습니다 Invoke-sqlcmd. SQL에 해당하는 모듈을 찾으려고했지만 내 컴퓨터에서 하나도 찾지 못했습니다.
모듈을 가져 오려면 내 컴퓨터 (컴퓨터에 이미 SQL Server Management Studio 2008 R2가 있음)에 무엇이든 설치해야합니까 .sql? 아니면 Powershell을 사용하여 파일을 쉽게 실행할 수있는 방법이 있습니까?
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.
MSDN의 Import the SQLPS Module 에서 인용 ,
PowerShell에서 SQL Server를 관리하는 권장 방법은 sqlps 모듈을 Windows PowerShell 2.0 환경으로 가져 오는 것입니다.
예, Add-PSSnapinChristian이 자세히 설명 하는 접근 방식을 사용할 수 있지만 권장되는 sqlps 모듈 접근 방식을 이해하는 것도 유용합니다.
가장 간단한 경우는 SQL Server 2012가 있다고 가정합니다. sqlps 가 설치에 포함되어 있으므로를 통해 다른 모듈 (일반적으로 프로필에 있음 )을 로드하기 만하면 됩니다 Import-Module sqlps. 을 사용하여 시스템에서 모듈을 사용할 수 있는지 확인할 수 있습니다 Get-Module -ListAvailable.
SQL Server 2012가없는 경우에는 sqlps 모듈을 모듈 디렉터리에 다운로드하기 만하면 Get-Module / Import-Module에서 찾을 수 있습니다. 흥미롭게도 Microsoft는 이 모듈을 다운로드 할 수 있도록 하지 않습니다 ! 그러나 Chad Miller는 필요한 부분을 친절하게 패키지화 하고이 모듈 다운로드를 제공 했습니다 . ... Documents \ WindowsPowerShell \ Modules 디렉토리에 압축을 풀고 가져 오기를 계속하십시오.
모듈 방식과 스냅인 방식이 동일하지 않다는 점은 흥미 롭습니다. 그런 다음 실행 스냅인 (snapin)로드하면 Get-PSSnapin( 없이 -registered 매개 변수 넣은 것만 보여주기를) 당신은 SQL 스냅인 (snapin)를 볼 수 있습니다. 반면에 sqlps 모듈을로드하면 Get-PSSnapin로드 된 스냅인이 표시되지 않으므로 스냅인 Invoke-Sqlcmd만 검사 하여 cmdlet 을 테스트하는 다양한 블로그 항목이 거짓 부정 결과를 제공 할 수 있습니다.
2012.10.06 갱신
sqlps 모듈, sqlps 미니 셸 및 SQL Server 스냅인에 대한 전체 스토리를 보려면 최근 Simple-Talk.com에 게시 된 SQL Server 개발자 및 DBA를위한 두 부분으로 구성된 미니 시리즈 Practical PowerShell을 살펴보십시오. 한 독자의 의견에 따르면,이 문제를 성공적으로 "혼란"했습니다. :-)
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
다음은 SQL 스냅인을로드하기 위해 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
}
}
2008 Server 2008 및 2008 R2 포함
Add-PSSnapin -Name SqlServerCmdletSnapin100, SqlServerProviderSnapin100
2012 년과 2014 년
Push-Location
Import-Module -Name SQLPS -DisableNameChecking
Pop-Location
참고 URL : https://stackoverflow.com/questions/10894688/how-to-execute-sql-file-using-powershell
'Program Club' 카테고리의 다른 글
| com.sun.jdi.InvocationException이 메서드를 호출하는 동안 발생했습니다. (0) | 2020.11.07 |
|---|---|
| 다중 조각 활동에서 onContextItemSelected를 처리하는 방법은 무엇입니까? (0) | 2020.11.07 |
| ToString ( "X2")의 의미는 무엇입니까? (0) | 2020.11.07 |
| Maven이 인코딩에 대해 경고하는 이유는 무엇입니까? (0) | 2020.11.07 |
| JWT 토큰을 디코딩하는 방법은 무엇입니까? (0) | 2020.11.07 |