Sql server 2008 如果只有一个参数不同,如何避免重复相同的查询?
使用Microsoft SQL Server 2008,我有一个类似以下内容的SQL查询: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
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