sql-server – ‘;’在TSQL语句的开头
|
有时我会看到以分号’;’开头的SQL Server语句如下 ;WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1,Col2,Col3
ORDER BY ( SELECT 0)) RN
FROM #MyTable)
DELETE FROM cte
WHERE RN > 1
另一个例子是; THROW 为什么有一个’;’ TSQL语句的开始 更新1: 请注意,我在问”’在声明的开头.这个问题与这个问题不重复 When should I use semicolons in SQL Server? 更新2: @MartinSmith答案是有道理的. 为了确保我们有一个完整的答案这个职位,请考虑这个受人尊敬的文章: http://www.sommarskog.se/error_handling/Part1.html#jumpTHROW
我同意@MartinSmith的回答,但似乎这个事情正在采取一些相当极端的水平. 通常,在存储过程中,THROW是由其自己的行声明的. SQL开发人员不仅仅是合并这样的SQL行,而且想要分号. 对我来说,有更多的机会人们意外丢弃一个表,而不是将“THROW”语句与另一行TSQL混合 这个例子在上面引用的这个例子是极端的,很少发生的吗?或者我在这里错过了一点? 解决方法应该是在他们之前的陈述之后.但是在大多数情况下,在TSQL中,终止的冒号语句在实践中目前是可选的(尽管技术上不推荐使用 Not ending Transact-SQL statements with a semicolon),并且不执行语句结束半冒号的存在.一个例外是MERGE语句(确实需要一个终止的半冒号)以及WITH WITH THROW之前的语句 所以对于StackOverflow来说,这是一个有点防御性的做法,如果OP(或者将来的读者)将它粘贴到一些现有的批处理中间,这些批处理在前面的语句中没有必要的半冒号,然后抱怨它不起作用他们收到以下错误.
在前面的语句以分号终止的情况下,额外的语句不会有任何损害.它只是被视为一个空的声明. 这种做法本身可能会导致问题,尽管在多语句无效的上下文中使用CTE.例如在WITH之前插入分号可能会破坏它. CREATE VIEW V1
AS
WITH T(X)
AS (SELECT 1)
SELECT *
FROM T;
类似地,THROW盲目插入前导的半结肠也可能引起问题. IF @i IS NULL ;THROW 50000,'@i IS NULL',1;
我已经修复了the example you give in your question,并将其改为 ;
--Ensure that any immediately preceding statement is terminated with a semicolon above
WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1,Col3
ORDER BY ( SELECT 0)) RN
FROM #MyTable)
DELETE FROM cte
WHERE RN > 1; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- mysql备份脚本 mysqldump使用方法详解
- SQL:如何查找从一个表链接到另一个表的最小条目数
- sqlserver数据库主键的生成方式小结(sqlserver,mysql)
- SQL Server Sql语句与存储过程查询数据的性能测试实现代码
- sql – 给出信件,获取字母表中的下一个字母
- sql-server – 数据库优先EF7-beta7 dnx ef dbcontext scaf
- sql-server – SQL Server:无法为链接服务器“(null)”初始
- MYSQL必知必会读书笔记 第一章(基础)
- SQL SERVER使用REPLACE将某一列字段中的某个值替换为其他的
- ORDER BY在Sql Server 2008视图中
