非常简单的sybase sql函数不会起作用

时间:2014-04-17 19:11:27

标签: sql tsql sybase sql-function

我想知道为什么这个简单的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)

我不明白这是不正确的语法。有谁知道为什么这是一个错误?

2 个答案:

答案 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方言不支持此选项。