我想知道为什么这个简单的sql函数不起作用?
CREATE FUNCTION dbo.getTableCounts (@STREAM_ID nvarchar(10))
RETURNS table
AS RETURN ( select 1 as 'one', 2 as 'two');
当我在qwerybuilder中运行它时,我收到两条错误消息:
Incorrect syntax near the keyword 'table' (for line 2)
和
Incorrect syntax near ',' (for line 3)
我不明白这是不正确的语法。有谁知道为什么这是一个错误?
答案 0 :(得分:2)
根据ASE的Reference manual你只能返回一个标量表达式:
create function [ owner_name. ] function_name
[ ( @parameter_name [as] parameter_datatype [ = default ]
[ ,...n ] ) ]
returns return_datatype
[ with recompile]
as
[begin]
function_body
return scalar_expression
[end]
因此,您无法使用table
作为数据类型。
答案 1 :(得分:1)
与Microsoft SQL Server不同,在Sybase中,如果您需要将表作为结果类型,则不使用函数而是使用存储过程。在您的情况下,过程的定义(用Watcom-SQL编写)将如下所示:
CREATE PROCEDURE getTableCounts(@STREAM_ID NVARCHAR(10))
RESULT(one INT, two INT)
BEGIN
SELECT 1 AS one, 2 AS two;
END;
但Sybase中的Transact-SQL方言不支持此选项。