SQL Server 存储过程中换行符的含义是什么

问题描述 投票:0回答:3

像这样的存储过程有效

 SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO

 ALTER PROCEDURE [dbo].[AllotTectOnBay] 
      @date datetime,
      @AddTech [dbo].[AddTechnicianBayallotment] READONLY 
 AS
 BEGIN
     SET NOCOUNT ON;

     begin try
     begin transaction

     commit transaction
     end try
     BEGIN CATCH
         rollback transaction;
         declare @ErrorMessage nvarchar(max), @ErrorSeverity int, @ErrorState int;

         select 
             @ErrorMessage = ERROR_MESSAGE() + '' Line '' + cast (ERROR_LINE() as nvarchar(5)), 
             @ErrorSeverity = ERROR_SEVERITY(), 
             @ErrorState = ERROR_STATE(); 

         raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState); 
     END CATCH
 END
 GO

但是当我把所有东西都放在一行上时,它就不起作用了。为什么? SQL Server 是否有像行尾这样的东西?在 C# 中?

sql-server stored-procedures
3个回答
1
投票

问题可能出在

GO
命令上。它必须放在一行中(并且可能包含注释)

Transact-SQL 语句不能与 GO 命令占用同一行。但是,该行可以包含注释。

参考链接:MDSN GO COMMAND

存储过程的

ALTER
END
可以放在一行中。


0
投票

作为一个选项,您还可以在多行中定义 sql 语句。

string sqlCommand = @"select * from foobar
                      where ....";

0
投票

第一:

“GO”不是 SQL 语法的一部分。这是 SSMS 的指令,将整个脚本分成独立的查询,每个查询将依次执行。这意味着您编写的任何 SQL,如果您打算在 SSMS 之外的任何地方执行它,您需要自己模拟行为(维护连接并依次执行每个批处理)或仅执行重要的批处理。

如果您不使用带引号的标识符(您没有),并且 ANSI_NULLS 的设置是您的默认设置?您不需要执行其中任何一个。

因此,删除顶部的前言,您应该能够执行它。

第二:

SQL 中的换行符是空格。它们与任何其他空白区域具有完全相同的功能。 SQL 确实使用“;”作为语句终止符。当您的一批语句在语法上明确时,可以选择使用它。而且几乎总是如此!然而,我们中的许多人始终如一地使用它们,因为我们觉得当 SQL 语句变得相当长并且必须分布在多行中时,它们可以澄清代码,并且可能具有自己的缩进结构,具体取决于您的风格。 (SQL 语句有时会变得非常长……不过,正如我所说,它们是可选的。您不需要它们来解决您的问题,并且简单地添加它们

不会解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.