SQL - 执行任何" ALT" T-SQL中的命令

时间:2014-09-29 15:18:55

标签: sql sql-server tsql

我正在尝试找到一种方法来运行 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)

1 个答案:

答案 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中工作,你甚至无法确定键盘组合分配给哪个功能,因为键盘组合可以由用户重新分配给不同的命令。 )

可能的替代方案:

  • 如果要自动化IDE,请查看模板和宏(如果它具有此功能)。
  • 放弃IDE并使用SQLCMD命令行实用程序直接执行脚本(虽然这似乎是不可能的,因为您被告知要避免使用Powershell,也许还有CMD)。 / LI>
  • 在脚本中添加一些前缀代码,用于检查它是否在SQLCMD模式下运行,如果不是,则中止。请参阅上面链接问题的this answer