Sql server 使用按大小写排序时操作数类型冲突
我在存储过程中有一个SELECT语句,它根据变量的值生成不同的结果顺序: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
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
设为typeuniqueidentifier
,则不会产生错误,但因为它有,所以不能这样做。可以创建随机int
值吗?谢谢。如果@RandomAnswers=0
它是否会按answerID
排序,然后忽略NEWID()
?我只是不太明白这里发生了什么…@EvilDr添加了更多细节。啊,所以语句的orderby部分实际上在后台创建了一个NEWID列?好的,case语句是orderby子句的第一列。然后是逗号,后跟第二列。在第一列中的值相等的情况下,行将按第二列排序。这实际上非常有效。在玩游戏时,我可以在不同的时间获得各种各样的随机性,例如,按fkID排序,someCol,CASE WHEN@random=1,然后NEWID()结束,answerID
。太棒了,非常感谢你-这是一次真正的学习经历。。。