【问题标题】:Can I use SQLCMD Commands in Visual Studio Database Project Stored Procedure?我可以在 Visual Studio 数据库项目存储过程中使用 SQLCMD 命令吗?
【发布时间】:2019-01-21 05:22:38
【问题描述】:

我在多个存储过程中有很多相同的 SQL。

例如,大多数过程都声明了相同的变量,并且在同一个 try catch 块中处理错误。

我想使用:r 命令,这样我就可以将这段代码写在一个文件中,然后将其导入每个sp。我可以在构建前和构建后脚本中使用该命令,但无法使其在正常的“构建”类型数据库对象中工作。

例子:

\Shared\CommonVariables内的SQL:

[p_An_Example]内:

错误只是说“SQL46010:\ 附近的语法不正确。”

-

如果我将路径用引号括起来,则错误将在“BEGIN”上替换为一个:

“SQL46010:BEGIN 附近的语法不正确。”

-

有什么我可以做的吗?目前[p_An_Example] 具有Build Build Action 属性,\Shared\CommonVariables 设置为None。

(我使用的是 Visual Studio 2017,数据库项目指向 2008 数据库,安装了 SQLCMD 等)

编辑:不是重复,因为我确实打开了 SQLCMD 模式...但事实证明 SQLCMD 命令在存储过程语句中不可用

【问题讨论】:

  • 用于构建模型的 T-SQL 源代码可能包含 SQLCMD 变量,但不包含 SQLCMD 命令,例如 :r.. I'm not aware of a way to include files during the build process that become part of the CREATE PROCEDURE 语句。
  • @DanGuzman 是的,我已经检查过了,并且确实打开了 SQLCMD 模式,所以这一定是问题所在……这在 SP 中是不可能的。感谢您的确认

标签: sql-server visual-studio tsql sqlcmd database-project


【解决方案1】:

是的,该选项在 SQL -> 执行设置 -> SQLCMD 模式:

但是请注意,您不能在 SP 中包含 sqlcmd 代码,因为 DBMS 无法解释代码,它纯粹是为了在编码环境中使用;例如在 SSMS/VS 中。

【讨论】:

  • 原来我确实启用了这个选项,但正如 DanGuzman 在 cmets 中所说的那样,SQLCMD 命令在 CREATE PROC 语句中不可用
  • @SamuelO'Connor 是的,没错。它们不能在对象的定义内(正如我在答案中提到的),因为 DBMS 本身没有 SQLCMD 模式。使用 SQLCMD 语句时,解释和处理它们的是应用程序 (VS/SSMS),而不是 DBMS。
【解决方案2】:

在Visual Studio 2019 中,您可以通过使用SQLCMD 语句打开文件来执行相同操作,然后单击新视图中的最后一个图标以消除错误:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 2019-03-03
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多