SQL Server在单个insert语句中选择和设置

时间:2017-12-21 06:34:09

标签: sql-server

我可以在单个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,但对解决方案无关紧要)

1 个答案:

答案 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');