在选择字段作为标识时插入表格

时间:2013-08-16 17:07:56

标签: sql sql-server

我有一个SQL问题。

我正在编写与此SQL语句类似的内容。

if object_id('G2Records') is not null
drop table g2records

WITH G2Records AS
 (
SELECT *
FROM table_A a
LEFT OUTER JOIN table_B ON A.id = B.table_A_Id
 )
SELECT identity(1,1) AS id, *
INTO table_c
FROM G2Records

SQL给出了身份错误。

基本上,有没有办法将一个标识字段插入到一个表中,每次运行这个SP时我都会丢弃它?显然table_c.id会重置,这没关系。

但是我真的想要这样的东西的原因是因为table_a特意经常添加字段,所以我不想为table_c写一个CREATE脚本,其中包含来自table_a和_b的精确字段,因为每个有人向table_a或_b添加字段时,我需要回到此SP并进行修改。并不像其他部门在添加新字段时告诉我的那样。

标识字段仅适用于我们正在开发的一些新开发项目,并且需要它。

SQL不必像我所拥有的那样,只要能完成我的要求:)

提前致谢。

1 个答案:

答案 0 :(得分:4)

IDENTITY()函数的第一个参数是数据类型,必须指定它。 the documentation中清楚地概述了这一点,当您遇到错误和/或已经猜到语法并且它不起作用时,它通常应该是您的第一个资源。在此处发布问题时,请不要说SQL gives errors,而是发布实际的错误消息。 e.g:

  

Msg 102,Level 15,State 1,Line 5
  “1”附近的语法不正确。

这似乎不太有用,但具体而言比模糊更好。

尝试:

;WITH G2Records AS
(
  SELECT *
  FROM dbo.table_A AS a
  LEFT OUTER JOIN dbo.table_B AS b
  ON A.id = B.table_A_Id
)
SELECT IDENTITY(INT,1,1) AS id, *
----------------^^^ salient part right here
  INTO dbo.table_c
  FROM G2Records;