Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我的查询与我的函数不兼容_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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())

嗨,迪普什卡,正如波迪卢斯卡首先教我的,所以我标记了他的答案=)