【问题标题】:Instead of ';' how to indicate end of batch in SQL Server Management Studio (SMSS)?代替 ';'如何在 SQL Server Management Studio (SMSS) 中指示批处理结束?
【发布时间】:2016-08-31 11:12:49
【问题描述】:

在 Sql Developer (SqlDev)(Oracle 工具)中,我大部分时间都使用 ';'表示批次的结束。

我们也使用';'当有一个包含大量批次的较大脚本时。例如一个脚本,其中第一批创建一个表,第二个在该表中插入数据,第三个与刚刚创建的表和另一个表进行连接,等等。

在 SqlDev 上,脚本(其中包含不同的批次)运行良好。但是,当我们将确切的脚本复制到 SQL Server Management Studio (SMSS) 并运行它时,它给出的错误是(连接创建的表的第三批)表不存在。

如何让 scipt 在 SMSS 上运行而脚本不会失败?

【问题讨论】:

    标签: sql-server ssms


    【解决方案1】:

    在 SQL Server 中,您可以使用 'GO' 来拆分批处理或语句块。 如下所示。

    ALTER TABLE [dbo].[Security] ADD  CONSTRAINT [DF_Security_ImportSettings]  DEFAULT ((11111011111111111.)) FOR [ImportSettings]
    GO
    
    ALTER TABLE [dbo].[Security] ADD  CONSTRAINT [DF_Security_PricingType]  DEFAULT ((-1)) FOR [PricingType]
    GO
    
    ALTER TABLE [dbo].[Security] ADD  CONSTRAINT [DF_Security_AutoUpdateCustomPricing]  DEFAULT ((1)) FOR [AutoUpdateCustomPricing]
    GO
    

    【讨论】:

      【解决方案2】:

      Go 是您要查找的关键字..

      示例..

      insert into t1
      select 1
      go
      
      alter table t1
      add abc int
      

      这也可以在 SSMS(虽然我还没有测试过)中配置为 ; 或其他词..

      【讨论】:

        【解决方案3】:

        似乎在 SQL Server Management Studio (SMSS) 中有时需要使用“GO”而不是“;”。

        ';'与使用 ';' 相比,在 SQL Server Management Studio (SSMS) 中的工作方式不同例如 SQl Developer (SQLDev)(Oracle 工具)。

        在 SQLDev 中的 ';'充当批处理结束指示器,在使用 DLL 时 SSMS 看不到它。相反,SMSS 首先查看整个脚本,然后想出聪明的方法来运行它。这意味着一切都是并行运行的,其中一些批次依赖于其他批次,但它们没有正确运行并导致脚本失败。

        在我的情况下,这意味着我必须使用“GO”来告诉 DBMS 运行第一个、第二个和第三个 sequantial 而不是并行运行。我改变了所有的';'在脚本中使用 GO(实际上它里面有更多的批次),这就成功了。我不确定这样做是否完全正确,但至少它有效。 :)

        另见:

        What is the use of GO in SQL Server Management Studio & Transact SQL?

        When do I need to use Begin / End Blocks and the Go keyword in SQL Server?

        【讨论】:

        • 这与顺序或并行运行脚本无关,它与范围和编译有关。 OPs 脚本在编译时失败,因为脚本中引用的表在脚本启动之前不存在。 GO 语句的使用在多个批处理的脚本中划定了每个批处理的范围,每个批处理仅在所有前面的批处理完成后才被编译。相反,; 符号只是批处理中各个语句之间的分隔符。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 2010-10-09
        • 2011-05-27
        相关资源
        最近更新 更多