我正在尝试创建一个PowerShell脚本来自动化一个非常简单的过程,但是,我无法工作(如果有的话)。文档不是我需要的,过时的或冲突的。
我有一些变化:
$SQLConnection = New-Object System.Data.SQLClient.SQLConnection
$SQLConnection.ConnectionString = "Data Source=.\SQL2016;Initial Catalog=TEST;Trusted_Connection=true;"
$SQLConnection.Open()
$Cmd = new-object system.Data.SqlClient.SqlCommand($SQLConnection)
Invoke-Sqlcmd -InputFile "C:\dev\test\script.sql" | Out-File -filePath "C:\dev\test\output.sql"
$SQLConnection.Close()
我没有设法连接到数据库。
想法是,script.sql
吐出一堆SQL(这很好用),我们将把它放到源代码控制中。一旦进入源代码管理,Jenkins的工作就会对它做一些事情。
尽量保持尽可能基本,除了不同的连接字符串之外,不需要灵活性。我想尽可能避免使用PSSQL,用户抛出他们的连接字符串(数据库将是名称)并运行脚本,完成工作。
谁能指出我正确的方向?
只有在没有安装SqlServer模块或正在做一些不寻常的事情时才需要System.Data.SQLClient
。这是一个更冗长的方法。
您只需要:
Import-Module SqlServer;
Invoke-Sqlcmd -ServerInstance '.\SQL2016' -Database 'TEST' -InputFile 'C:\dev\test\script.sql' |
Out-File -FilePath "C:\dev\test\output.sql"
但是...你的输出文件实际上不是.sql文件,除非script.sql
中的查询实际上返回应该作为SQL执行的字符串。它应该是一个.txt文件。
根据你究竟产生了什么,你可能想要考虑Export-Csv -Path "C:\dev\test\output.csv" -NoTypeInformation
而不是Out-File
。我不知道你是在尝试导出数据还是仅仅记录信息。
此外,您需要确保没有在GO
中使用批处理分隔符(script.sql
),或者依赖于任何“SQLCMD模式”(在SQL Server Management Studio中调用)或其他sqlcmd.exe
特定语法。 Invoke-Sqlcmd
doc概述了两者之间的差异。如果你不知道那是什么,你可能很安全。