真正简单的sybase sql函数无法工作

真正简单的sybase sql函数无法工作,sql,tsql,sybase,sql-function,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) 及 我不明白这怎么是不正确的语法。有人知道这是

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

我不明白这怎么是不正确的语法。有人知道这是错误的原因吗?

根据ASE,您只能返回标量表达式:

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]
因此不能将表用作数据类型。

根据ASE,只能返回标量表达式:

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]

因此不能将表用作数据类型。

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

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