我正在使用sql server,并且有一个 Users
包含以下列的表:
Sr. (int), civil_id (varchar), fname etc
我要做的是有序地插入 civil_id
在我的用户表中说100101,等等
为了这个目的,我正试图 civil_id
( varchar
使用top 1和order by键入最后一行的)并将其递增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
类型。
1条答案
按热度按时间eqfvzcg81#
总的来说,你的问题在我看来是正确的,尽管有一些困惑。让我们建议一些你可以做的改进-
对于上面的查询(基本上是您的查询),我总是得到预期的结果,您可以在这里通过使用不同的输入demo更改值来检查它
现在,由于@civic中的值是按预期生成的,通过检查“sr=299”来询问您基本上更新的是哪一行,然后选择哪一行来检查是否相应地更新了值。如果您正在更新正确的行,那么值应该是正确的,并且@civic value generation没有问题。