SQL 在不指定列列表的情况下复制记录;忽略身份
SQL copying record with out specifying column list; ignoring Identity
我正在尝试将记录从 TableA 复制回 TableA,但使用的是新标识。
我不想指定列列表,因为我有超过 100 列,将来可能会有更多。我喜欢可以 运行 when/if 改变的代码块。
看了类似的问题后,我尝试了这段代码
SELECT * INTO #tmp FROM TableA WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN Id;
INSERT INTO TableA SELECT * FROM #tmp;
Drop Table #tmp;
但是我仍然收到此错误
An explicit value for the identity column in table 'dbo.TableA' can only be specified when a column list is used and IDENTITY_INSERT is ON.
运行 a Select * FROM #tmp 给了我我所期望的。包含我的所有列的单个记录,Id 列除外。
有什么想法吗?
谢谢!
编辑
这是 Id 列属性的图片
使用动态 SQL:获取您的列列表(ID 除外),使用该列表构建插入语句,然后对其调用 exec
:
SELECT *
INTO #tmp
FROM TableA
WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN id;
DECLARE @cols varchar(max);
SELECT
@cols = COALESCE(@cols + ',', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableA' AND COLUMN_NAME <> 'id'
--select @cols -- display column list for debugging
DECLARE @sqltxt varchar(max) = 'INSERT INTO TableA (' + @cols + ') SELECT * FROM #tmp';
--SELECT @sqltxt -- display the statement for debugging
exec (@sqltxt)
DROP TABLE #tmp
试试这个
第 1 步:
INSERT INTO Employee1(FirstName,LastName,ManagerID,Salary)
SELECT FirstName,LastName,ManagerID,Salary
FROM Employee1
WHERE EmployeeID=X -- Your Emplyee ID
第 2 步:
DELETE FROM Employee1 WHERE EmployeeID=X
我正在尝试将记录从 TableA 复制回 TableA,但使用的是新标识。 我不想指定列列表,因为我有超过 100 列,将来可能会有更多。我喜欢可以 运行 when/if 改变的代码块。
看了类似的问题后,我尝试了这段代码
SELECT * INTO #tmp FROM TableA WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN Id;
INSERT INTO TableA SELECT * FROM #tmp;
Drop Table #tmp;
但是我仍然收到此错误
An explicit value for the identity column in table 'dbo.TableA' can only be specified when a column list is used and IDENTITY_INSERT is ON.
运行 a Select * FROM #tmp 给了我我所期望的。包含我的所有列的单个记录,Id 列除外。
有什么想法吗?
谢谢!
编辑 这是 Id 列属性的图片
使用动态 SQL:获取您的列列表(ID 除外),使用该列表构建插入语句,然后对其调用 exec
:
SELECT *
INTO #tmp
FROM TableA
WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN id;
DECLARE @cols varchar(max);
SELECT
@cols = COALESCE(@cols + ',', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableA' AND COLUMN_NAME <> 'id'
--select @cols -- display column list for debugging
DECLARE @sqltxt varchar(max) = 'INSERT INTO TableA (' + @cols + ') SELECT * FROM #tmp';
--SELECT @sqltxt -- display the statement for debugging
exec (@sqltxt)
DROP TABLE #tmp
试试这个
第 1 步:
INSERT INTO Employee1(FirstName,LastName,ManagerID,Salary)
SELECT FirstName,LastName,ManagerID,Salary
FROM Employee1
WHERE EmployeeID=X -- Your Emplyee ID
第 2 步:
DELETE FROM Employee1 WHERE EmployeeID=X