2015-04-17 83 views
0

我能做到這一點,它的工作原理(但想一些更簡單):T-SQL如何在WHERE IN子句中使用變量?

Declare @PropIDs  varchar(50) 
Set @PropIDs = '1, 2' 

IF OBJECT_ID('dbo.TempProp') IS NOT NULL DROP TABLE dbo.TempProp 

CREATE TABLE [dbo].[TempProp](
    [PropCode] [VarChar](3) NULL) 

Set @Sql = 'Insert Into TempProp Select PropertyCode From Property where PropertyID In (' + @PropIDs + ')' 

Execute (@Sql) 

但我希望我能做到這本:

Declare @PropIDs 
Set @PropIDs = '1, 2' 
Select PropertyCode 
Into #TempProp 
From Property where PropertyID IN (@PropIDs) 

它是」 ......財產(@PropIDs)「,這給我帶來麻煩。 有什麼建議嗎?

+0

如果您值是在這樣的列表中,那麼你必須使用動態SQL。 – Taryn

+0

我的意思是「... PropertyID IN(@PropIDs)」給我帶來麻煩的部分 –

+5

使用表值參數而不是逗號分隔的字符串。這不是JSON,那些是個人價值觀。 –

回答

0

創建與此類似

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))  
returns @temptable TABLE (items varchar(MAX))  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(@slice)  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return 
end; 

該代碼是從這個問題拆分表值函數:separate comma separated values and store in table in sql server

然後用它在你的查詢是這樣的:

Declare @PropIDs 
Set @PropIDs = '1, 2' 
Select PropertyCode 
Into #TempProp 
From Property where PropertyID IN (dbo.Slit(@PropIDs, ',')) 
相關問題