2017-04-05 50 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

相關問題