您可以使用拆分表值函数此:
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