sql-server - 在 INSERT 语句中增加变量

标签 sql-server

有没有办法做到以下几点:

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/

相关文章:

sql-server - Entity Framework 7 无法插入日期时间

sql - 存储过程间歇性地超时!

sql-server - 如何使用 T-SQL 检测 SQL Server 数据库的只读状态?

sql-server - SQL Server 中指定值的累计计数

sql - 如何在 T-SQL 中更改 SQL Server 列名称?

c# - 从 C# SQLCLR 存储过程批量插入 SQL 表的最快方法

sql-server - 用户分配的托管标识的 SQL Azure 连接错误 'Login failed for user'

sql-server - 即使在备份日志到磁盘后,日志文件上的 DBCC SHRINKFILE 也不会减小大小

sql-server - 将数据库恢复到新位置

sql - INFORMATION_SCHEMA.ROUTINES 中的 SPECIFIC_SCHEMA 和 ROUTINE_SCHEMA 有什么区别?