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