插入带有ID列的表

时间:2010-07-06 03:25:20

标签: tsql

我正在尝试从临时表中插入列,并希望ID列按顺序递增。我正在使用以下代码,但没有插入任何内容:

INSERT INTO TestDataTable
SELECT  Code, Description, ParentID  FROM TempTable

请告诉我如何才能让它发挥作用。

2 个答案:

答案 0 :(得分:1)

您需要将ID设为IDENTITY column。所以在你的select into语句中,这样的事情应该做:

INSERT INTO TestDataTable
SELECT ID = IDENTITY(INT,1,1), Code, Description, ParentID  FROM TempTable

答案 1 :(得分:1)

我会说你有两种选择。第一种是在目标表的数据定义语言中处理它。请参阅为MS SQL Server编写的此代码示例。

CREATE TABLE #A (  
  Id    INT NOT NULL IDENTITY(1,1) PRIMARY KEY
, Code  VARCHAR(10) NOT NULL)  

CREATE TABLE #B (
  Code  VARCHAR(10) NOT NULL)  

 INSERT INTO #B VALUES ('alpha')
 INSERT INTO #B VALUES ('beta')
 INSERT INTO #B VALUES ('gamma')
 INSERT INTO #B VALUES ('delta')

 INSERT INTO #A (Code)
 SELECT Code
 FROM   #B

 SELECT *
 FROM   #A

 DROP TABLE #A
 DROP TABLE #B

如果你不允许在目标表的DDL中处理,那么如果你知道它是空的,那么你就可以完成你需要在进入表格的路上指定的内容。

CREATE TABLE #A (
  Id    INT NOT NULL PRIMARY KEY
, Code  VARCHAR(10) NOT NULL)  

CREATE TABLE #B (
  Code  VARCHAR(10) NOT NULL)

 INSERT INTO #B VALUES ('alpha')
 INSERT INTO #B VALUES ('beta')
 INSERT INTO #B VALUES ('gamma')
 INSERT INTO #B VALUES ('delta')

 INSERT INTO #A (Id, Code)
 SELECT ROW_NUMBER() OVER (ORDER BY Code), Code
 FROM   #B

 SELECT *
 FROM   #A

 DROP TABLE #A
 DROP TABLE #B

我绝对推荐第一种方法。它更简单,您不必担心在代码中处理自动增量。