我在存储过程中有一个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
不兼容
我如何克服这个问题?在其他网站上,我看到了非常类似的方法,没有错误。 感谢。
答案 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