SQL 服务器 sp_MSforeachtable 脚本错误
SQL Server sp_MSforeachtable script error
采用以下脚本:
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?";
GO
CREATE TABLE _adminServices (
[ServiceID] INT CHECK ([ServiceID] > 0) NOT NULL IDENTITY,
[ServiceName] NVARCHAR(255) DEFAULT NULL,
[ManagerStaffID] INT CHECK ([ManagerStaffID] > 0) DEFAULT NULL,
[ODMStaffID] INT CHECK ([ODMStaffID] > 0) DEFAULT NULL,
[ReferralInactivityDays] INT DEFAULT NULL,
[TargetSupportHours] INT DEFAULT NULL,
[ShowInLists] SMALLINT NOT NULL DEFAULT '1',
[RecordEntryDate] DATETIME2(0) DEFAULT NULL,
[RecordModDate] DATETIME2(0) DEFAULT NULL,
PRIMARY KEY ([ServiceID])
) ;
CREATE INDEX [ManagerStaffID] ON _adminServices ([ManagerStaffID]);
CREATE INDEX [ODMStaffID] ON _adminServices ([ODMStaffID]);
CREATE INDEX [ShowInLists] ON _adminServices ([ShowInLists]);
GO
EXEC sp_MSforeachtable @command1 = 'IF (
select COUNT(TABLE_NAME)
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+''.''+TABLE_NAME), COLUMN_NAME, ''IsIdentity'') = 1
AND TABLE_SCHEMA+''.''+TABLE_NAME = ''?''
) = 1
BEGIN
SET IDENTITY_INSERT ? ON;
END;';
GO
INSERT INTO _adminServices (ServiceID, ServiceName, ManagerStaffID, ODMStaffID, ReferralInactivityDays, TargetSupportHours, ShowInLists, RecordEntryDate, RecordModDate) VALUES
(1, 'Service 1', 16, 18, 0, NULL, 1, '2017-07-21 11:59:56', '2017-10-25 09:38:02');
GO
当我在 SSMS 中执行上述脚本时,出现以下错误:
Msg 544, Level 16, State 1, Line 36
Cannot insert explicit value for identity column in table '_adminServices' when IDENTITY_INSERT is set to OFF.
谁能告诉我为什么?
EDIT:我的目标如下:我有多个 tables 和多个插入。
对于插入,我有脚本。因为我不想为每个 table 编写 SET IDENTITY_INSERT ON 和 OFF 因为我只是在文件上有 INSERT INTO 查询,所以我想要一种方法来执行以下操作:
删除数据库中的所有table
创建所有 table(为此我有 SQL)
将所有需要的身份设置为 ON
运行 插页(为此我有 SQL)
将所有需要的身份设置为关闭
- sp_MSforeachtable 运行 在与您的插入相关的另一个会话中
- 在任何时候,一个会话中只有一个 table 可以将 IDENTITY_INSERT 属性 设置为开启。
插入原值的一般方案:
创建TABLE
设置身份插入
插入值
关闭身份插入
如果你table没有单一结构sp_MSforeachtable你就不会是suitable
采用以下脚本:
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?";
GO
CREATE TABLE _adminServices (
[ServiceID] INT CHECK ([ServiceID] > 0) NOT NULL IDENTITY,
[ServiceName] NVARCHAR(255) DEFAULT NULL,
[ManagerStaffID] INT CHECK ([ManagerStaffID] > 0) DEFAULT NULL,
[ODMStaffID] INT CHECK ([ODMStaffID] > 0) DEFAULT NULL,
[ReferralInactivityDays] INT DEFAULT NULL,
[TargetSupportHours] INT DEFAULT NULL,
[ShowInLists] SMALLINT NOT NULL DEFAULT '1',
[RecordEntryDate] DATETIME2(0) DEFAULT NULL,
[RecordModDate] DATETIME2(0) DEFAULT NULL,
PRIMARY KEY ([ServiceID])
) ;
CREATE INDEX [ManagerStaffID] ON _adminServices ([ManagerStaffID]);
CREATE INDEX [ODMStaffID] ON _adminServices ([ODMStaffID]);
CREATE INDEX [ShowInLists] ON _adminServices ([ShowInLists]);
GO
EXEC sp_MSforeachtable @command1 = 'IF (
select COUNT(TABLE_NAME)
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+''.''+TABLE_NAME), COLUMN_NAME, ''IsIdentity'') = 1
AND TABLE_SCHEMA+''.''+TABLE_NAME = ''?''
) = 1
BEGIN
SET IDENTITY_INSERT ? ON;
END;';
GO
INSERT INTO _adminServices (ServiceID, ServiceName, ManagerStaffID, ODMStaffID, ReferralInactivityDays, TargetSupportHours, ShowInLists, RecordEntryDate, RecordModDate) VALUES
(1, 'Service 1', 16, 18, 0, NULL, 1, '2017-07-21 11:59:56', '2017-10-25 09:38:02');
GO
当我在 SSMS 中执行上述脚本时,出现以下错误:
Msg 544, Level 16, State 1, Line 36 Cannot insert explicit value for identity column in table '_adminServices' when IDENTITY_INSERT is set to OFF.
谁能告诉我为什么?
EDIT:我的目标如下:我有多个 tables 和多个插入。 对于插入,我有脚本。因为我不想为每个 table 编写 SET IDENTITY_INSERT ON 和 OFF 因为我只是在文件上有 INSERT INTO 查询,所以我想要一种方法来执行以下操作:
删除数据库中的所有table
创建所有 table(为此我有 SQL)
将所有需要的身份设置为 ON
运行 插页(为此我有 SQL)
将所有需要的身份设置为关闭
- sp_MSforeachtable 运行 在与您的插入相关的另一个会话中
- 在任何时候,一个会话中只有一个 table 可以将 IDENTITY_INSERT 属性 设置为开启。
插入原值的一般方案:
创建TABLE
设置身份插入
插入值
关闭身份插入
如果你table没有单一结构sp_MSforeachtable你就不会是suitable