使用ORDER BY CASE时操作数类型冲突

时间:2014-07-15 10:22:38

标签: sql-server tsql sql-server-2012

我在存储过程中有一个SELECT语句,它基于变量的值产生不同的ORDER BY结果:

ALTER PROCEDURE [dbo].[myProc]

    @randomAnswers bit = 0

AS
    SELECT
        ab.answerID, -- int
        ab.someCol   -- nvarchar(max)
    FROM
        tbl_ABC ab 
    ORDER BY
        CASE WHEN @randomAnswers = 1 THEN 
            NEWID()
        ELSE 
            ab.answerID
        END;

错误是

  

操作数类型冲突:uniqueidentifier与int

不兼容

我如何克服这个问题?在其他网站上,我看到了非常类似的方法,没有错误。 感谢。

2 个答案:

答案 0 :(得分:2)

在两列上完成订单。

ORDER BY CASE WHEN @RandomAnswers = 1 THEN NEWID() END,
         ab.answerID

@RandomAnswers = 0时第一列将为空,这使第二列成为按列生效的有效顺序。

答案 1 :(得分:0)

试试这个:

ALTER PROCEDURE [dbo].[myProc]
    @randomAnswers bit = 0
AS
    SELECT ab.answerID,
           ab.someCol
    FROM tbl_ABC ab
    ORDER BY CASE WHEN @randomAnswers = 1 THEN CHECKSUM(NEWID()) ELSE ab.answerID END