2017-04-05 28 views
1

我的SSDT数据库发布是失败的,因为它错误地以为嵌入字符串指的是SQLCMD变量:SQL服务器SSDT发布失败想了PowerShell命令使用SQLCMD变量

EXEC xp_cmdshell 'powershell.exe $(Get-Date).IsDaylightSavingTime()' 

我可以手动运行该声明(SSMS中),并得到想要的结果(这是令人遗憾的“真”),但发布扼流圈试图解析声明:

SQL Execution error: A fatal error occurred. The variable Get-Date could not be found.

SQL Execution error: A fatal error occurred. Incorrect syntax was encountered while EXEC xp_cmdshell 'powershell.exe $(Get-Date).IsDaylightSavingTime()' was being parsed.

如何获得这种说法不破产,也不会混淆它的发布或将其添加到d中的SQLCMD变量列表中atabase项目?

(或者也许有一种更简单的方法来检查服务器的时区是否能观察到神秘的DST?美国的时区标识符表示“标准”,而不管在我们的开发人员机器上实际占主导地位,并且将所有引用从GETDATE )GETUTCDATE()是不可行的。)

回答

1

以前没有见过,但之后我再也没有试过从t-sql调用powershell :)。

最简单的将是通过使用这样的事情对xp_cmdshell的字符串分割:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4a07d229-7972-41d1-bd90-ffa979bc7069/how-to-escape-string-that-sqlcmd-thinks-is-a-variable-but-isnt?forum=transactsql

' + CHAR(36) + '

再一个简单的解决方案,而不PowerShell中,不知道如果我能想象一个更痛苦在t-sql上必须做的事情,对不起:)

+0

这有效(虽然以混淆的方式,最好只做'$'+'(stuff)'),但它必须设置一个变量是一个VARCHAR(也不是VARCHAR(MAX )但有限的长度)。谢谢。 – Elaskanator

相关问题