我正在尝试找到一种方法来运行 Alt + Q + M 以通过T-SQL命令切换到SQLCMD模式。客户不想使用PowerShell。
我尝试了以下内容,但我被困住了。有什么建议吗?
DECLARE @smtp VARCHAR(MAX)
SET @smtp = CHAR(65) + CHAR(76) + CHAR(84) + CHAR(43) + CHAR(77) + CHAR(43) + CHAR(81)
SELECT @smtp
EXEC(@smtp)
答案 0 :(得分:0)
在DBA Stack Exchange上查看此相关问题:Can I enable SQLCMD mode from inside a script?
回答该链接问题:您无法在脚本中切换到SQLCMD模式。必须在脚本运行之前在SQL Server Management Studio 中手动启用此模式。但是,您可以从脚本内部检测它是否以SQLCMD模式运行,如果不是则中止。
话虽如此,您的脚本出了什么问题?
根本问题在于您尝试通过EXEC
与IDE(SQL Server Management Studio)进行通信,这不是该语句的作用:它与SQL Server实例进行通信(并在其上运行)。
当您执行T-SQL脚本时,您主要是直接与SQL Server实例交谈;也就是说,没有任何用户界面的服务流程。因此,SQL Server对键盘一无所知,也不了解任何键盘快捷键。
(在SQL Server Management Studio或SQLCMD处理的脚本中,实际上存在某些"元命令"和指令,例如GO
,而不是由SQL Server实例处理不幸的是,没有这样的指令可以让你的IDE进入SQLCMD模式。)
EXEC
/ EXECUTE
是在SQL Server实例上处理的SQL语句。它执行存储在文本变量中的SQL语句。 不所做的是模拟IDE内部的按键操作。无论如何,它无法实现,因为在执行时,IDE已将其发送到服务器。 IDE无法再访问。这就是您的脚本失败的原因:Alt+M+Q
无效SQL。
(顺便说一下,如果你在SQL Server Management Studio中工作,你甚至无法确定键盘组合分配给哪个功能,因为键盘组合可以由用户重新分配给不同的命令。 )
可能的替代方案:
SQLCMD
命令行实用程序直接执行脚本(虽然这似乎是不可能的,因为您被告知要避免使用Powershell,也许还有CMD)。 / LI>