【发布时间】:2020-06-27 05:27:17
【问题描述】:
我正在使用 SQL Server,并且有一个包含这些列的 Users 表:
Sr. (int), civil_id (varchar), fname etc
我想要实现的是在我的用户表中有序插入civil_id,比如 100,101 等
为此,我尝试使用 top 1 获取最后一行的 civil_id(varchar 类型),并为我的下一个用户插入排序并递增 1。
ALTER PROCEDURE [dbo].[check123]
AS
SET NOCOUNT ON
BEGIN
DECLARE @civic int='';
SELECT TOP 1 @civic = CONVERT(INT, civil_id)
FROM Users
ORDER BY Sr DESC;
// just an example here
UPDATE Users
SET civil_id = @civic + 1
WHERE Sr = 299
//old civil_id was 10000 but after update it is 11
END
但问题是当我在分配价值时订购
@civic = CONVERT(INT, civil_id) FROM Users
我没有得到我想要的civil_id,实际上它根本没有排序,而是给出了 0 或其他一些输出。
我的 civil_id 列是 varchar 而不是 int 所以我转换了但我认为它仍在考虑 ASCII 值
有什么建议吗?
注意:我无法将civil_id 的列类型更改为int,因为已经有太多存储过程将其视为varchar 类型。
【问题讨论】:
-
在 INT 和 VARCHAR 列上的顺序将不会返回相同的结果。请添加一些示例数据,以便我们提供帮助。
-
添加了请看一下
-
你能告诉我们更多关于什么是“sr=299”吗?
-
sr 实际上是 int 类型的主键,在进入 db 时会自动递增
标签: sql sql-server database sql-order-by variable-declaration