Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在将IDENTITY_INSERT设置为ON/OFF之前和之后是否需要GO_Sql Server - Fatal编程技术网

Sql server 在将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将查询作为单独

我是否需要在将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
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?),因为它无法创建查询计划,因为表不存在。现在看来,这种特殊的限制已经消失了。那很有用,谢谢:)谢谢,我觉得去是烦。我不需要这个。当你从官方文档中复制并粘贴你的回复时,你可能应该引用来源: