Sql server 2008 如果只有一个参数不同,如何避免重复相同的查询?

Sql server 2008 如果只有一个参数不同,如何避免重复相同的查询?,sql-server-2008,tsql,code-duplication,Sql Server 2008,Tsql,Code Duplication,使用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 [Sche

使用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行代码或至少使查询更紧凑?如果性能很重要,这会是一个问题吗?

可能有更好的选择,但SQL Server 2008+的值语法如下:


另一种选择可能是加入或使用。

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

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

正如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
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