【问题标题】:Receiving following error "SELECT STATEMENTS INCLUDED WITHIN A FUNCTION CANNOT RETURN DATA TO A CLIENT"收到以下错误“函数中包含的选择语句无法将数据返回给客户端”
【发布时间】:2020-09-09 19:50:13
【问题描述】:

我正在尝试创建以下函数:

Create function mastercount
(
    @table nvarchar(50)
    , @policy nvarchar(20)
    , @firstname nvarchar(20)
    , @lastname nvarchar (20)
)    
Returns nvarchar (50)
As
Begin
    Declare @count int =''

    If @table ='A'
        Select count (*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname    
    Else If @table ='B'
        Select count (*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname    
    Else If @table ='A'
        Select count (*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname

    Return @count;
End

但我收到一个错误:

函数中包含的选择语句无法将数据返回给客户端

【问题讨论】:

  • 是的,你不能在函数中这样做。正如错误消息明确指出的那样。你的问题是什么?可能您想分配给@count 而不是直接分配给select
  • 您的路径可能源于架构问题,并且可能会将您带入死胡同。由于您的函数似乎正在生成行数,因此返回类型应该是 int 或 bigint,而不是 nvarchar。
  • 我的问题是如何返回计数而不出现此错误,谁能详细说明一下?
  • Martin 已经告诉过你,例如select into variable
  • 更好的是,不要使用 SELECT 来分配标量值。使用 SET。示例:set @count = (select count(*) from ....); 注意语句终止符 - 开始养成良好的习惯。

标签: sql sql-server function


【解决方案1】:

你可以这样试试。变量@count 被分配了一个空字符串。我将其更改为默认值为 0。此外,SELECT 语句试图将记录返回给客户端。现在它们都被分配给变量@count。

Create function mastercount
(
    @table nvarchar(50)
    , @policy nvarchar(20)
    , @firstname nvarchar(20)
    , @lastname nvarchar (20)
)    
Returns int
As
Begin
    Declare @count int=0;

    If @table ='A'
        Select @count=count(*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname    
    Else If @table ='B'
        Select @count=count(*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname    
    Else If @table ='A'
        Select @count=count(*)
        from A
        where policy = @policy and firstname = @firstname and lastname = @lastname

    Return @count;
End

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多