2

使用 Microsoft SQL Server 2008,我有一个类似于此的 SQL 查询:

insert into [Schema].[Table] ([A], [B], [C]) values (@A, 1, @C)
insert into [Schema].[Table] ([A], [B], [C]) values (@A, 2, @C)
                                                         ⁞
insert into [Schema].[Table] ([A], [B], [C]) values (@A, n, @C)

鉴于查询性能无关紧要,有没有办法避免编写n行代码或至少使查询更紧凑?如果性能很重要,那会是一个问题吗?

4

3 回答 3

1

这可能有更好的选择,但 SQL Server 2008+ 具有以下语法VALUES

insert into [Schema].[Table] ([A], [B], [C]) 
values (@A, 1, @C),
(@A, 2, @C),
(@A, 3, @C),
(@A, 4, @C),
...
(@A, n, @C)

另一种选择可能是加入数字表,或使用递归 CTE

于 2012-08-04T20:46:49.803 回答
1

也许您可以针对这种特定情况使用循环,即:

declare @counter int
set @counter = 1

while @counter < 10
begin
  insert into [Schema].[Table] ([A], [B], [C]) values (@A, @counter, @C)
  set @counter = @counter + 1
end
于 2012-08-04T20:57:07.407 回答
0

正如 Oded 所指出的,CTE 可以快速完成以下工作:

declare @A as DateTime = GetDate()
declare @C as Float = 3.141459265358979323846264338
declare @N as Int = 10

declare @T as Table ( A DateTime, N Int, C Float )

; with Alicia as (
  select 1 as Number
  union all
  select Number + 1
    from Alicia
    where Number < @N )
  insert into @T
    select @A, Number, @C
      from Alicia
      order by Number

select * from @T order by N
于 2012-08-05T02:36:12.867 回答