【问题标题】:Only one expression can be specified when attempting to use select lists in scalar function尝试在标量函数中使用选择列表时只能指定一个表达式
【发布时间】:2013-12-21 07:08:06
【问题描述】:

以下过程根据以下每个查询的行数设置一个布尔值,然后应该将 true(1) 或 false(0) 值返回给 Access;我目前收到“当 EXISTS 未引入子查询时,选择列表中只能指定一个表达式”的错误。我怎样才能让它工作?

 CREATE FUNCTION [dbo].[FN_chk](@pF NVARCHAR(255), @pI NVARCHAR(100), 
    @pL NVARCHAR(100), @pLY NVARCHAR(100))

RETURNS INT AS
BEGIN

    DECLARE @Bool BIT
    SET @Bool = 0

    -- check allDataTemp
    If ((SELECT DISTINCT theFN, theIN, theLN, theANA FROM aDT
        WHERE theFN = @pF  and theIN = @pI 
        and theLN = @pL  and theANA = @pLY) > 0)
        BEGIN
            SET @Bool = 1
            RETURN @Bool
        END 

    -- check allDataTemp2
    If ((SELECT theFN, theIN, theLN, theANA FROM aDT2
        GROUP BY theFN, theIN, theLN, theANA 
        HAVING theFN = @pF  and theIN = @pI 
        and theLN = @pL  and theANA = @pLY) > 0)
        BEGIN
            SET @Bool = 1
            RETURN @Bool
        END 

    -- Return the result of the function
    RETURN @Bool

END

【问题讨论】:

    标签: sql sql-server sql-server-2008 scalar


    【解决方案1】:

    正如错误已经解释的那样,使用EXISTS

     If (EXISTS(SELECT DISTINCT theFN FROM aDT
        WHERE theFN = @pF  and theIN = @pI 
           and theLN = @pL  and theANA = @pLY))
        BEGIN
            SET @Bool = 1
            RETURN @Bool
        END
    

    同样改变另一个 IF...
    编辑:当行数可能为零时使用 EXISTS。此外,如果您 SELECT 只比较一个值,它也应该可以工作。

    【讨论】:

      【解决方案2】:

      您在 IF 中的查询返回大量列。将其与数字进行比较是没有意义的。 (例如是“编码”,“疯子”> 0?)

      最快的解决方法是改用exists

      If exists (SELECT DISTINCT theFN, theIN, theLN, theANA FROM aDT
          WHERE theFN = @pF  and theIN = @pI 
          and theLN = @pL  and theANA = @pLY)
          BEGIN
      

      更理想的是,根本不要同时使用列 - 你所关心的只是有行:

      If exists (SELECT count(1) FROM aDT
          WHERE theFN = @pF  and theIN = @pI 
          and theLN = @pL  and theANA = @pLY) 
          BEGIN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-17
        • 1970-01-01
        • 2011-09-24
        • 2018-04-14
        相关资源
        最近更新 更多