有没有办法做到以下几点:
DECLARE @startVal integer
SELECT
@startIdx = MAX(Range_val)
FROM
[Bookings].[dbo].[Range] (nolock)
INSERT INTO
[Bookings].[dbo].[Range]
VALUES
(INCR(@startVal), 'someVal', 'someOtherVal'),
(INCR(@startVal), 'someVal1', 'someOtherVal3'),
(INCR(@startVal), 'someVal2', 'someOtherVal4'),
其中 INCR() 是一些增加变量的函数。而不是做“@startIdx + 1”、“@startIdx + 2”等?
编辑:这不一定是表索引。我知道我可以删除表并以正确的方式重新创建它(假设这是索引),但这不是我的问题。有没有办法按照我描述的方式增加变量?
最佳答案
如果您只是想更轻松地处理并不能使用
此处的标识列是避免指定 +1
的几种方法;
declare @T TABLE (idx int identity(1, 1), f1 varchar(128), f2 varchar(128))
insert into @T values
('someVal', 'someOtherVal'),
('someVal1', 'someOtherVal3'),
('someVal2', 'someOtherVal4')
insert [Bookings].[dbo].[Range]
select @startIdx + idx, f1, f2 from @T
或者(id 是根据第一个字母按字母顺序而不是顺序分配的
field )
insert [Bookings].[dbo].[Range]
select @startIdx + row_number() over(order by name1) as n, *
from (
select top 0 '' as name1, '' as name2 --header
union all select 'someVal', 'someOtherVal'
union all select 'someVal1', 'someOtherVal3'
union all select 'someVal2', 'someOtherVal4'
) T
您确定要吗
nolock
?
关于sql-server - 在 INSERT 语句中增加变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217475/