我和你在一起。使用逗號分隔字符串不是一個壞方法。但是您可以創建一個Table-Valued Function
來即時生成表並將其與目標表連接起來。
Create Function [dbo].[Split]
(
@Array nvarchar(4000),
@Separator char,
@ToLower bit = 0
)
Returns
@Result Table
(
ItemKey int Identity(1, 1) Not Null,
ItemValue nvarchar(256) NULL
)
AS
BEGIN
Declare @Index int,
@Value nvarchar(256)
Select @Index = 0
Select @Value = Null
While (1 = 1)
Begin
Select @Index = CharIndex(@Separator, @Array)
If (@Index = 0)
Begin
Insert Into @Result Values (LTRIM(RTRIM(Case @ToLower When 1 Then Lower(@Array) Else @Array End)))
Break
End
Select @Value = SubString(@Array, 0, @Index)
Insert Into @Result Values (LTRIM(RTRIM(Case @ToLower When 1 Then Lower(@Value) Else @Value End)))
Select @Array = Right(@Array, Len(@Array) - @Index)
End
Return
END
Select *
from dbo.TargetTable tt, dbo.Split('101, 102, 103', ',', 0) r
Where (tt.PrimaryKey = r.ItemValue)
不幸的是,我不能使用Linq2SQL。但是,當我需要支持SQL Server 2005時,XML方法似乎是實現它的方法。 – driis 2009-11-15 16:20:50