首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Order by子句在操作过程中赋值时受影响

SQL Order by子句在操作过程中赋值时受影响
EN

Stack Overflow用户
提问于 2020-06-27 13:27:18
回答 1查看 29关注 0票数 0

我使用的是SQL Server,并且有一个包含以下列的Users表:

代码语言:javascript
复制
Sr. (int), civil_id (varchar), fname etc 

我想要实现的是在我的用户表中有序地插入civil_id,比如100、101等等

为此,我尝试使用TOP1和order by获取最后一行的civil_id (varchar类型),并在下一次用户插入时将其递增1。

代码语言:javascript
复制
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

但问题是,当我在排序时将值赋给

代码语言:javascript
复制
@civic = CONVERT(INT, civil_id) FROM Users

我没有得到我想要的civil_id,实际上它根本没有排序,而是给出了0或其他一些输出。

我的civil_id列是varchar而不是int,所以我进行了转换,但我认为它仍在考虑ASCII值

有什么建议吗?

注意:我不能将civil_id的列类型更改为int,因为已经有太多的存储过程将其视为varchar类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 13:58:49

总体而言,你的问题在我看来是正确的,尽管有一些混淆。让我们给出一些你可以改进的建议-

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[check123]                               
AS 
 SET NOCOUNT ON 
 BEGIN

 -- DECLARE @civic int='';
 -- Do not need to assign a blank string which is VARCHAR by default to a 
 -- Integer type variable. You can simply Declare the variable as below-
 DECLARE @civic INT

 SELECT TOP 1 @civic = CONVERT(INT, civil_id) + 1
 -- Directly generate the desired value by adding +1 as shown above
 -- Now your  declared variable @civic contains the final value you wants.
 FROM Users  
 ORDER BY Sr DESC;

 // just an example here  
 UPDATE Users
 SET civil_id = @civic
 WHERE Sr = 299
 //old civil_id was 10000 but after update it is 11  
 -- Not sure what you are checking here by sr = 299
END

对于上面的查询(基本上是您的查询),我总是得到预期的结果,您可以在这里通过使用不同的输入DEMO HERE更改值来检查它

现在,当@ that中的值按预期生成时,可以通过检查"sr= 299“来询问您基本上更新了哪一行,然后选择哪一行来检查相应更新的值。如果您正在更新正确的行/秒,值应该是正确的,并且@civer值的生成没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62606267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档