您可以使用拆分表值函數此:
CREATE FUNCTION [dbo].[Split](@RowData VARCHAR(8000), @SplitOn VARCHAR(5))
RETURNS @RtnValue TABLE
(
Id int identity(1,1),
Data nvarchar(2000)
)
AS
BEGIN
Declare @Cnt int
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
然後你可以在你的存儲過程中使用它,也許與另一個參數指示其範圍或列表:
CREATE PROCEDURE dbo.GetHouses(@Zip VARCHAR(8000), @Type INT)
AS
/*
@Type: 1 - List
2 - Range
*/
IF @Type = 1
BEGIN
SELECT *
FROM tbl_houses H
JOIN dbo.Split(@Zip, ',') S
ON H.zip_code = S.Data
END
IF @Type = 2
BEGIN
SELECT *
FROM tbl_houses
WHERE zip_code >= (SELECT Data FROM dbo.Split(@Zip, ',') WHERE Id = 1)
AND zip_code <= (SELECT Data FROM dbo.Split(@Zip, ',') WHERE Id = 2)
END
乾淨,簡單的方法 – Slappy 2011-03-30 00:21:59
輝煌的解決方案:)我非常感謝。 – MathiasH 2011-03-30 12:38:58