Microsoft SQL Server查询返回错误的结果


Microsoft SQL Server Query is Returning Wrong Result

我有以下代码:

$GetUID = $c->query("SELECT UserUID FROM dbo.Users_Master ORDER BY UserID DESC");
$UserUniqueID = $GetUID->fetch(PDO::FETCH_ASSOC);
$UUID = $UserUniqueID['UserUID'];
$NewUUID = $UUID + 1;

这是成功的工作,但问题是我的查询。

它总是在我的数据库中输入12。

我转到Microsoft SQL查询窗口,输入:

USE UserData;
SELECT UserUID FROM dbo.Users_Master ORDER BY UserID DESC

它返回:

11、17、15、19、16、18、10、13、12、14、3

这并不是从最高到最低的顺序。

然后我继续使用:

USE UserData;
SELECT UserUID FROM dbo.Users_Master ORDER BY UserID ASC

返回:

3、14、12、13、10、18、16、19、15、17、11

我想获得最高的UserUID和+1。我的代码一直在选择11是什么?

听起来UserId的数据类型不是int,您可以将cast()的值排序为:

SELECT UserUID 
FROM dbo.Users_Master 
ORDER BY cast(UserID as int) DESC

请参阅带有演示的SQL Fiddle

但是,最好的解决方案是更改表中的数据类型以匹配所存储的数据。

要更改SQL Server中的表,您可以使用:

alter table dbo.Users_Master alter column UserID int;

这样可以将数据存储在正确的数据类型中,这样就不必cast()值来排序

编辑#1,根据您对UserId是varchar的评论,您似乎指的是ORDER BY UserUID DESC,它是int