Sql 我的查询与我的函数不兼容
我想做的是执行简单的查询,以排除不必要的数据,由于一些要求,我必须使用函数来执行它,让我们看看我的示例数据和查询 我的表中的示例数据Sql 我的查询与我的函数不兼容,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我想做的是执行简单的查询,以排除不必要的数据,由于一些要求,我必须使用函数来执行它,让我们看看我的示例数据和查询 我的表中的示例数据 ID | TITLE | 1 | A | 2 | B | 3 | C | 我的职能 CREATE FUNCTION ufnTitleValue() RETURNS NVARCHAR(255) AS BEGIN DECLARE @Val NVARCHAR(MAX)
ID | TITLE |
1 | A |
2 | B |
3 | C |
我的职能
CREATE FUNCTION ufnTitleValue()
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @Val NVARCHAR(MAX)
SELECT @Val = STUFF((SELECT ''',''' + TITLE FROM [MyTable]
WHERE TITLE IN('A','B')
FOR XML PATH('')),1,2,' ')
SET @Val = @Val + ''''
IF @Val IS NULL
RETURN ''
RETURN @Val
END
'A','B'
函数返回的结果
CREATE FUNCTION ufnTitleValue()
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @Val NVARCHAR(MAX)
SELECT @Val = STUFF((SELECT ''',''' + TITLE FROM [MyTable]
WHERE TITLE IN('A','B')
FOR XML PATH('')),1,2,' ')
SET @Val = @Val + ''''
IF @Val IS NULL
RETURN ''
RETURN @Val
END
'A','B'
我的问题是,当我试图排除数据时,它不起作用
SELECT TITLE FROM [MYTable] WHERE TITLE NOT IN (ufnTitleValue())
原始结果
TITLE
A
B
C
预期结果
TITLE
C
我很困惑,为什么我的功能不工作,我的错误是什么?我哪里出错了?您的函数无法处理您的表,因为该函数返回字符串
“'a','B'”
中的获取值列表,这些值可以在代码中声明,也可以作为查询的单列结果。它不需要字符串
因此,您正在搜索表中标题不是“A”、“B”的条目。他们都不是
更改您的函数以返回一个具有单列的表。正如@podiluska所指出的,您可以按以下方式执行:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ufnTitleValue]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[ufnTitleValue]
GO
CREATE FUNCTION ufnTitleValue()
RETURNS TABLE
AS
return
select TITLE
FROM [MyTable]
WHERE TITLE IN('A','B')
Go
SELECT TITLE FROM [MYTable] WHERE TITLE NOT IN (select * from dbo.ufnTitleValue())
嗨,迪普什卡,正如波迪卢斯卡首先教我的,所以我标记了他的答案=)