Sql server 使用按大小写排序时操作数类型冲突

Sql server 使用按大小写排序时操作数类型冲突,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我在存储过程中有一个SELECT语句,它根据变量的值生成不同的结果顺序: ALTER PROCEDURE [dbo].[myProc] @randomAnswers bit = 0 AS SELECT ab.answerID, -- int ab.someCol -- nvarchar(max) FROM tbl_ABC ab ORDER BY CASE WHEN @randomAnswer

我在存储过程中有一个SELECT语句,它根据变量的值生成不同的结果顺序:

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不兼容

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

试试这个:

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 

请按两列顺序进行订购

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

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

如果将
answerID
设为type
uniqueidentifier
,则不会产生错误,但因为它有,所以不能这样做。可以创建随机
int
值吗?谢谢。如果
@RandomAnswers=0
它是否会按
answerID
排序,然后忽略
NEWID()
?我只是不太明白这里发生了什么…@EvilDr添加了更多细节。啊,所以语句的orderby部分实际上在后台创建了一个NEWID列?好的,case语句是orderby子句的第一列。然后是逗号,后跟第二列。在第一列中的值相等的情况下,行将按第二列排序。这实际上非常有效。在玩游戏时,我可以在不同的时间获得各种各样的随机性,例如,
按fkID排序,someCol,CASE WHEN@random=1,然后NEWID()结束,answerID
。太棒了,非常感谢你-这是一次真正的学习经历。。。