Sql server 在将IDENTITY_INSERT设置为ON/OFF之前和之后是否需要GO
我是否需要在将IDENTITY_INSERT设置为ON/OFF之前和之后进行操作 我看到很多示例,文章都使用了这个,但是当我跳过GO时,脚本工作得很好Sql server 在将IDENTITY_INSERT设置为ON/OFF之前和之后是否需要GO,sql-server,Sql Server,我是否需要在将IDENTITY_INSERT设置为ON/OFF之前和之后进行操作 我看到很多示例,文章都使用了这个,但是当我跳过GO时,脚本工作得很好 GO SET IDENTITY_INSERT [PropertyValue] ON GO -- Some script GO SET IDENTITY_INSERT [PropertyValue] OFF GO 我想知道这是否是一个很好的代码转换。您不需要这样做。GO指示SQL Server Management Studio将查询作为单独
GO
SET IDENTITY_INSERT [PropertyValue] ON
GO
-- Some script
GO
SET IDENTITY_INSERT [PropertyValue] OFF
GO
我想知道这是否是一个很好的代码转换。您不需要这样做。
GO
指示SQL Server Management Studio将查询作为单独的命令执行。有些条款需要这个,有些则不需要
例如,通常需要使用GO
将CREATE TABLE
子句与INSERT
s分离到同一个表中
编辑:达米恩指出,情况似乎不再如此CREATE TABLE
后面可以是INSERT
just fine,这同样适用于DROP TABLE
和其他。总是在进步,嗯?:)我还记得我尝试过其他一些情况,似乎您也不再需要将CREATE过程
作为命令中的最后一条语句。时代变迁:)
set identity\u insert
不需要用GO
分隔。当您自动生成SQL代码时,它通常被用作安全实践,因为您不一定知道其他地方发生了什么(例如,您可能在上一个子句中创建了表,因此可以肯定的是,您在标识插入之前放置了一个GO
)。但是,如果您在手写的SQL中使用它,并将其作为一个批处理执行,则它不是必需的,也不会给您带来任何特定的好处。GO
不是Transact-SQL语句;它是由sqlcmd
和osql
实用程序和SQLServerManagementStudio代码编辑器识别的命令。
SQL Server实用程序将GO
解释为一个信号,表明它们应该将当前一批Transact-SQL语句发送到SQL Server实例。当前一批语句由自上次GO
或自特别会话或脚本启动(如果这是第一次GO
)以来输入的所有语句组成。
Transact-SQL语句不能与GO
命令占用同一行。但是,该行可以包含注释。
用户必须遵守批处理规则。例如,在批处理中第一条语句之后执行存储过程时,必须包含
EXECUTE
关键字。局部(用户定义)变量的范围仅限于一个批次,在执行GO
命令后无法引用。我不同意您选择的示例<代码>创建表T(ID int不为空);插入T(ID)值(1)代码>(甚至在一行上)运行良好。@Damien_异教徒:哈,你说得对。时代变了。我记得在过去的某个时候这是不可能的(MS SQL 2000?),因为它无法创建查询计划,因为表不存在。现在看来,这种特殊的限制已经消失了。那很有用,谢谢:)谢谢,我觉得去是烦。我不需要这个。当你从官方文档中复制并粘贴你的回复时,你可能应该引用来源: