【问题标题】:Invoke a SQL script containing Powershell variables调用包含 Powershell 变量的 SQL 脚本
【发布时间】:2017-06-15 10:39:27
【问题描述】:

我似乎无法在 SQL 脚本中使用名为 $sqlParameters 的 PS 变量,是否有任何线索表明我做错了什么?

PowerShell:

$sqlParameters = "powerShellVar = 'CONTOSO\cmpsvc'"
invoke-sqlcmdInvoke SQL script using Powershell variables -inputfile "c:\temp\test.sql" -serverinstance SRVSCCM\MSSQLSERVER -variable $sqlParameters 

SQL:

CREATE LOGIN [$sqlParameters] FROM WINDOWS; 
USE test
EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
GO

詹姆斯

【问题讨论】:

    标签: sql-server powershell sqlcmd


    【解决方案1】:

    你可以试试这样的:

    $MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
    Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
    

    或类似的东西:

    $query=@'
    CREATE LOGIN [$sqlParameters] FROM WINDOWS; 
    USE test
    EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
    GO
    '@
    
    Invoke-Sqlcmd -Query $query 
    

    但是如果你有一个文件,那么你只能使用 T-sql 变量,因为 SQL 只会以这种方式理解:

    Invoke-Sqlcmd -InputFile "C:\Folder\SQLCmd.sql"
    

    希望对你有帮助。

    【讨论】:

    • 喂,其实它不喜欢这个变量?
    • Invoke-Sqlcmd :此数据库中不存在用户或角色“$name”。在 line:10 char:1 + Invoke-Sqlcmd -Query $query
    • $name= 'CONTOSO\cmpsvc' $query=@' USE test EXEC sp_addrolemember N'db_owner', N'$name' GO '@ Invoke-Sqlcmd -Query $query
    • @JamesAtance:如果对您有帮助,请接受答案。这将是可观的。
    【解决方案2】:

    您可以这样做的一种方法是使用Get-Contents,然后让 Powershell 进行变量扩展,如下所示:

    $sqlParameters = 'CONTOSO\cmpsvc'"
    Invoke-SqlCmd -Query ($ExecutionContext.InvokeCommand.ExpandString(Get-Contents 'my_file.sql'))
    

    或者更简单的方法是使用格式字符串。将文件内容更改为:

    CREATE LOGIN [{0}] FROM WINDOWS; 
    USE test
    EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
    GO
    

    那么您的 Powershell 代码将是这样的:

    $sqlParameters = 'CONTOSO\cmpsvc'"
    Invoke-SqlCmd -Query ((Get-Contents 'my_file.sql') -f $sqlParameters)
    

    【讨论】:

    • 奇怪,因为我无法让这些工作中的任何一个工作,有没有人有其他想法。我要做的就是根据 Powershell 变量向数据库添加权限?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多