gpt4 book ai didi

sql - 表中身份列的显式值错误?

转载 作者:行者123 更新时间:2023-12-03 08:15:49 27 4
gpt4 key购买 nike

我收到以下错误消息,我已经调试了两个标识插入,并且它们执行都没有问题。以前有人遇到过此错误,有人知道如何解决此问题吗?

Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'c365online_script1.dbo.tProperty' can only be specified when a column list is used and IDENTITY_INSERT is ON.



码:
declare @Source_Database_Name varchar(255) = 'Production2';
declare @Destination_Database_Name varchar(255) = 'c365online_script1';

declare @Company_Id int = 1 --declare a companyid

CREATE TABLE #CompanyID (ID bigint)

INSERT INTO #CompanyID(ID)
VALUES('15')

-- Copy over company records from tCompanytable

--FIRST CURSOR LOOP THROUGH THIS TABLE
CREATE TABLE #TableList (
processorder int,
tablename NVARCHAR(100)
)
INSERT INTO #TableList (processorder, tablename )
VALUES
(1, 'tProperty');

DECLARE @Counter INT = 0 -- counting variable

----------- Cursor specific code starts here ------------
-- company cursor
declare copyCompanyDataCursor CURSOR fast_forward FOR
SELECT ID from #CompanyID;

open copyCompanyDataCursor
fetch next from copyCompanyDataCursor into @Company_Id;

WHILE @@FETCH_STATUS = 0
BEGIN
declare @processorder int;
declare @tablename varchar(500);
-- table cursor

declare copyTableDataCursor CURSOR fast_forward FOR
SELECT processorder,tablename from #TableList order by processorder;

open copyTableDataCursor
fetch next from copyTableDataCursor into @processorder, @tablename;

while @@FETCH_STATUS = 0
BEGIN
SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] ON

-- Does the table have a companyID column? if statement checking for company id
IF EXISTS(SELECT * FROM Production2.INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME='CompanyID' and TABLE_NAME=@tablename)
BEGIN
if @Counter <= 0 -- make sure loop executes only once.
BEGIN
declare @debug varchar(max)
SET @debug = 'INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + CAST(@Company_Id as varchar(10))
print @debug
set @Counter = 1
EXEC(@debug)
--EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id )
END
END
ELSE
BEGIN
Print 'No'
END
-- if yes then copy data based on companyID in cursor
-- if no check if this is the first time through company loop and copy all data
-- if @firstloop company exists look at information schema

--EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename )
-- company logic


SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] OFF

FETCH NEXT FROM copyTableDataCursor into @processorder,@tablename;
END

close copyTableDataCursor;

Deallocate copyTableDataCursor;

--INSERT INTO c365online_script1.dbo.tCompany
--SELECT *
--FROM production2.tCompany
--WHERE ISNULL(CompanyID, 0) = 0 -- copy all data where id is equal to zero
--@Destination_Database_Name

--
--EXEC(INSERT + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')')
--SET @firstLoop = false;
FETCH NEXT FROM copyCompanyDataCursor into @Company_Id;
END

CLOSE copyCompanyDataCursor;
DEALLOCATE copyCompanyDataCursor;


--Cleanup
DROP TABLE #CompanyID
DROP TABLE #TableList

最佳答案

好吧,错误说明了一切:

An explicit value for the identity column in table 'c365online_script1.dbo.tProperty' can only be specified when a column list is used and IDENTITY_INSERT is ON.



因此,您的 INSERT语句 必须使用列列表!

采用
INSERT INTO dbo.Table(col1, col2, ...., colN) VALUES(Val1, val2, ...., ValN)

而不仅仅是
INSERT INTO dbo.Table   VALUES(Val1, val2, ...., ValN)
^^^^ no column list defined!!

这样就可以了!

关于sql - 表中身份列的显式值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19717006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com