在SQL Server 2005中,您可以考虑使用表值函数。
例如为:
SELECT ... FROM SomeTable INNER JOIN SomeFunction() F ON SomeTable.SomeColumn = F.Id
...
CREATE FUNCTION SomeFunction()
RETURNS @IdTable TABLE (Id INT)
AS
RETURN
(
SELECT 2 Id
UNION ALL
SELECT 4
UNION ALL
SELECT 8
)
更常见的是,你可能想在值作为参数传递给存储过程。你可以做成逗号分隔的字符串。例如。
EXEC MyProcedure('2,4,8')
...
CREATE PROCEDURE MyProcedure
(
@IdString AS VARCHAR(MAX)
)
AS
BEGIN
SELECT ... FROM SomeTable INNER JOIN SomeFunction(@IdString) F ON SomeTable.SomeColumn = F.Id
END
...
CREATE FUNCTION dbo.SomeFunction
(
@IdString VARCHAR(MAX)
)
RETURNS @IdTable TABLE (Id INT)
AS
BEGIN
DECLARE @CommaIndex INT, @TotalLength INT, @StartIndex INT, @Id VARCHAR(10)
SET @TotalLength=LEN(@IdString)
SET @StartIndex = 1
WHILE @StartIndex <= @TotalLength
BEGIN
SET @CommaIndex = CHARINDEX(',', @IdString, @StartIndex)
IF @CommaIndex > 0
BEGIN
SET @Id = SUBSTRING(@IdString, @StartIndex, @[email protected])
SET @StartIndex = @CommaIndex + 1
END
ELSE
BEGIN
Set @Id = SUBSTRING(@IdString, @StartIndex, @[email protected]+1)
SET @StartIndex = @TotalLength+1
END
INSERT INTO @IdTable
(Id)
VALUES
(CAST(@Id AS INT))
END
RETURN
END
来源
2009-03-04 21:44:26
Joe
+1 - 当我遇到这个问题时我会用UDF – annakata 2009-03-04 21:53:15