我有一个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不必像我所拥有的那样,只要能完成我的要求:)
提前致谢。
答案 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;