代码之家  ›  专栏  ›  技术社区  ›  Jim G.

SQL Server Management Studio(或SQL Server)是否计算*all*表达式?

  •  -1
  • Jim G.  · 技术社区  · 15 年前

    以下是我的配置:

    • 我有一个可重新运行的批处理脚本,用于更新数据库。
      • 如果表“A”不存在,则创建表“A”并在其中插入行。
    • 稍后在批处理脚本中,我创建了一个schemabulley 索引视图 在那张桌子上。
    • ,当我重新运行脚本时,也就是在创建表之后,SQL Server Management Studio会计算“insert rows”代码,该代码受“If this table does not exist”代码保护,并产生以下错误:

      Msg 1934,16级,状态1,第15行

    • 请注意:如果有人在真空中尝试这个插入语句,我将完全 期待

    我的问题是:

    SSMS编译器是否计算 全部的 表达式,而不管它们是否实际执行?

    2 回复  |  直到 15 年前
        1
  •  0
  •   SQLMenace    15 年前

    declare @i int
    select @i =1
    
    if @i = 1
    begin
        declare @i2 int
        set @i2 = 5
    end
    else 
    begin
        declare @i2 int
        set @i2 = 5
    end
    

    消息134,级别15,状态1,行12 变量名'@i2'已经声明。变量名在查询批处理或存储过程中必须是唯一的。

    另一个temp表示例如下: What is deferred name resolution and why do you need to care?

        2
  •  -1
  •   AlexS    15 年前

    请注意,您提到的大多数设置都是连接级别的,也就是说,如果您设置/更改它们,除非您关闭连接或显式更改它们的值,否则它们将保持有效。

    编辑:不是SSMS编译器对您尝试执行的SQL进行计算,而是SQL Server。你说的“评估”是什么意思?是“执行”吗?当您运行批处理(实际上是由服务器执行的批处理)时,SQLServer首先进行语法分析,并在发现错误时抛出错误 句法 错误,此时未执行任何操作。如果语法正确,服务器将开始执行批处理。

    同样,你的错误似乎是 -所以我想你应该仔细观察情况并跟踪发生了什么(或者提供更多关于“有时”的细节)。

    推荐文章