首页 > 解决方案 > 为什么 T-SQL 中的一批只能有一个 create 语句?

问题描述

这个设计决策背后的原因是什么?

标签: sqlsql-server

解决方案


为什么 T-SQL 中的一批只能有一个 create 语句?

哪些语句可以在批处理中组合,哪些语句必须是批处理中的第一个语句,这些限制是 TSQL 解析器的技术限制。他们没有“好”的理由;随着语言在许多版本中的发展,平衡引入新语法的同时保持向后兼容性在语言中引入了一些类似这样的怪癖。在 CTE 之前用 ';' 终止语句的要求 是另一个类似的怪癖。

典型的解决方法是将 DDL 语句推送到嵌套批处理中。例如:

declare @sql1 nvarchar(max) = '
create schema foo;
'
declare @sql2 nvarchar(max) = '
create table foo.bar(id int);
'

exec (@sql1)
exec (@sql2)

推荐阅读