我可以在单个insert语句中递增并使用变量吗?我正在关注的是:我正在从CSV生成表的插入,但我还需要一个表的唯一值(目标表没有标识/序列PK,只有一个,nvarchar(50)
PK )
DECLARE @counter INT = 1;
INSERT INTO table ([Code],[Name]) VALUES( @counter = @counter + 1, 'val 1');
INSERT INTO table ([Code],[Name]) VALUES( @counter = @counter + 1, 'val 2');
INSERT INTO table ([Code],[Name]) VALUES( @counter = @counter + 1, 'val 3');
这不起作用,但有什么相似之处? (我最后需要将@counter
转换为nvarchar
,但对解决方案无关紧要)
答案 0 :(得分:2)
您没有增加@counter
变量
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 1');
set @counter = @counter + 1
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 2');
set @counter = @counter + 1
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 3');
另外,我建议你使用SCOPE_IDENTITY()
来正确处理身份;
select @counter = MAX(Code) from table
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 1');
select @counter = SCOPE_IDENTITY()
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 2');
select @counter = SCOPE_IDENTITY()
INSERT INTO table ([Code],[Name]) VALUES( @counter, 'val 3');