问一个按时间排序的触发器的问题

cjl8882000 2006-09-13 09:06:30
如题 做了个按时间排序的触发器
几经调试 已经成功 代码如下
CREATE TRIGGER new_insert ON dbo.ShrinkOrder
after INSERT
AS
declare @Orderid char(11)
declare @TODAY char(8)
declare @num int
declare @count int
begin
select @TODAY=convert(char(8),getdate(),112)
select @num=(select count(orderid) from shrinkorder where orderid like @today+'%')
if @num=0
begin
select @count=0
end
else
begin
select @count=(select top 1 convert(int,right(OrderId,3)) from ShrinkOrder where orderid like @TODAY+'%' order by orderid desc)
end
select @Orderid=@TODAY+right('000'+ltrim(convert(char(3),@count)+1),3)
update ShrinkOrder set OrderId=@Orderid where OrderId='9999999999'
end
但是有个问题没弄明白 我定义的局部变量@count为整型 最后在更新@Orderid的时候对@count的加1操作 为什么要在变成字符型之后才行?
问题就是这句
select @Orderid=@TODAY+right('000'+ltrim(convert(char(3),@count)+1),3)
如果我在之前加1 也就是
select @Orderid=@TODAY+right('000'+ltrim(convert(char(3),@count+1)),3)这样
自动生成的编号就变成200609131而不是20060913001了…………
请问下 这到底是为什么啊?
...全文
199 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
从得到的结果来看 进行隐式转换的肯定是前面的字符型 也就是把convert(char(3),@count)变成整型来和后面的1相加的 不然不可能得到20060913002
有哪位大侠知道的啊?
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
我就是想明白 中间他是如何隐式转换的?
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
是啊 我明白 但是按照道理 当我先变成字符型的时候是1后面两个空格
然后+1 或者你们说的连接一个1 那么就应该是什么值呢?
所以我在想的是 中间会不会有一个隐式的转换 将1后面两个空格转换成1 然后数值加1 得到2
最后在变回来的时候会在左边加上空格?
marco08 2006-09-13
  • 打赏
  • 举报
回复
一個數字相加,一個字符串連接
bzscs 2006-09-13
  • 打赏
  • 举报
回复
@count是数字,你直接加1当然是数值加1

转换成字符以后,+号才表示是字符后面连接一个“1”
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
刚又调试了会 查明原因
当在之前加1的时候 再变成字符型 会在右边加空格
但之前不加1的时候 变成字符型 会在左边加空格
这到底是为什么??? 费解…………
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
调试的时候只知道这样调试可以成功 但是为什么确不明白
高手啊 还没起床啊 指点下小弟我啊
cjl8882000 2006-09-13
  • 打赏
  • 举报
回复
哦 忘记说了 Orderid是我的主键 char(11)的 给他了个默认值'9999999999'
可以方便找到插入数据的位置…………

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧