【发布时间】:2012-07-25 00:59:10
【问题描述】:
我使用这个查询在我的数据库中创建了一个函数:
CREATE FUNCTION dbo.fnSplit(
@sInputList VARCHAR(MAX) -- List of delimited items
, @sDelimiter VARCHAR(MAX) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(MAX))
BEGIN
DECLARE @sItem VARCHAR(MAX)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
GO
SQL Server 返回:Command(s) completed successfully.
然后我尝试运行这个查询:
SELECT * FROM maj_Posts a
WHERE FeedID = (SELECT dbo.fnSplit(b.FeedIDs) FROM maj_Magazines b WHERE OwnerID = 1)
ORDER BY countOfComments DESC
返回错误:Msg 4121, Level 16, State 1, Line 1
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fnSplit", or the name is ambiguous.
注意b.FeedIDs是一个包含逗号分隔数字的字符串,像这样:1,2,4
我想从maj_Posts 获取行,它们的a.FeedID 是b.FeedIDs 中的数字之一...(例如,如果b.FeedIDs 是1,2,4,我需要来自 maj_Posts 的行,它们的 FeedID 是 1 或 2 或 4。)
有什么问题?
【问题讨论】:
-
您已经创建了表值函数,但您正在使用它,就好像它是标量函数一样。
-
我没听懂你说的。你能解释一下吗?
-
这类函数属于
FROM子句。 -
我是 SQL Server 用户定义函数的新手,不知道哪种函数适合我。你能帮我修复这段代码吗?
标签: sql sql-server sql-server-2005 select user-defined-functions