我写了一个sql查询,它工作得很好,但是在转换成函数时遇到了困难,需要一些建议。
下面是sql查询
SELECT
CASE WHEN COUNT(EXPORT_DATE) >=1 AND COUNT(IMPORT_DATE) >=1 AND COUNT(LOCATION)>=1 THEN
CAST (1 AS BIT)
ELSE
CAST (0 AS BIT)
END AS ISTHERE
FROM data_tables
WHERE EXPORT_DATE = '1/1/2020' AND IMPORT_DATE = '1/5/2020' AND LOCATION = 'ENTER LOCATION HERE'
如果在名为isthere的列中满足所有这些条件,则返回1或0
我正试图把它变成一个函数,这样我就可以调用它,并且陷入困境
CREATE FUNCTION duplicate_data (@exportdate date, @importdate date, @location varchar(255))
RETURNS BIT
AS
BEGIN
SELECT
CASE WHEN COUNT(EXPORT_DATE) >=1 AND COUNT(IMPORT_DATE) >=1 AND COUNT(LOCATION)>=1 THEN
CAST (1 AS BIT)
ELSE
CAST (0 AS BIT)
END AS ISTHERE
FROM data_tables
WHERE EXPORT_DATE = '1/1/2020' AND IMPORT_DATE = '1/5/2020' AND LOCATION = 'ENTER LOCATION HERE'
RETURN ISTHERE
END
我有两个错误
函数中包含的select语句不能将数据返回给客户端
无效的列名=isthere
对于编写函数还是新手,我的语法哪里不正确?
这是针对microsoft sql server的,必须满足所有3个条件。
非常感谢
大明Pig
2条答案
按热度按时间xam8gpfp1#
这两个错误都说明了问题所在:
函数中包含的select语句不能将数据返回给客户端
你有一个标量函数,所以,正如错误告诉你的,你不能有一个标量函数
SELECT
将数据返回给客户端。无效的列名=isthere
在声明中
RETURN ISTHERE
列ISTHERE
没有上下文,因此出现错误。标量函数与用于返回的变量一起工作,因此实际需要的是:
vuv7lop32#
因为你的
where
条件下,您可以将查询大大简化为:然后可以将其作为标量内联函数编写: