CREATE FUNCTION [dbo].[func_1]
(
@ListNum AS nvarchar(MAX)
)
RETURNS @t TABLE
(
col_1 nvarchar(MAX)
)
AS
BEGIN
INSERT @t
SELECT col_1
FROM table_name
WHERE col_2 IN (@ListNum)
RETURN
END
当我只在parapater中传递一个值时(例如:1),函数正常工作,但我如何传递多个值(例如:1,2,3,4,5)。我收到以下错误:
Procedure execution failed
42000 - [SQL Server]Error converting data type nvarchar to bigint.
有一种简单的方法可以解决这个问题吗?
答案 0 :(得分:0)
嗨,你可以尝试这样,
CREATE FUNCTION Splitstring (@Input NVARCHAR(MAX),
@Character CHAR(1))
RETURNS @Output TABLE (
Item NVARCHAR(1000))
AS
BEGIN
DECLARE @StartIndex INT,
@EndIndex INT
SET @StartIndex = 1
IF Substring(@Input, Len(@Input) - 1, Len(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE Charindex(@Character, @Input) > 0
BEGIN
SET @EndIndex = Charindex(@Character, @Input)
INSERT INTO @Output
(Item)
SELECT Substring(@Input, @StartIndex, @EndIndex - 1)
SET @Input = Substring(@Input, @EndIndex + 1, Len(@Input))
END
RETURN
END
GO
CREATE FUNCTION [dbo].[Func_1] (@ListNum AS NVARCHAR(MAX))
RETURNS @t TABLE (
col_1 NVARCHAR(MAX))
AS
BEGIN
INSERT @t
SELECT p.col1
FROM dbo.Splitstring(@ListNum, ',') s
JOIN Table_Name t
ON t.col2 = s.Item
RETURN
END
DECLARE @var VARCHAR(100)='1,2,3,4'
SELECT *
FROM dbo.Func_1(@var)
引入一个名为split string的函数。它将以逗号分隔的列表作为表返回。将逗号分隔表与实际表一起加入。这将给出结果。
答案 1 :(得分:0)
对于版本2008+,使用表分隔值可以帮助调用过程可以构建表,并且您可以创建表类型。如果必须在单个字符串中传递逗号(或其他字符分隔值),则需要将逗号分隔的字符串分隔为自己的结果集。
当您的字符串不包含任何特殊的XML字符(如尖括号&lt;&gt;)时,XML方法很有效。 - how-to-split-a-comma-separated-value-to-columns
我认为这适用于您的调整后的功能;
LMO.PDF