【发布时间】:2016-12-09 09:22:54
【问题描述】:
编辑:
我将列数据类型更改为 Varchar,如果建议有效,答案将被投票赞成
全文:
我收到一个人的数据,每个人都有一个 5 位数长的相关临时号码,我处理此信息,然后将变量发送到处理此数据插入的存储过程。将变量发送到存储过程时,我似乎丢失了任何前缀 0。
例如:
发送到存储 Proc 的数字 - 实际插入列的数字
12345 - 12345
01234 - 1234
12340 - 12340
这似乎只发生在前面带有0 的数字上。意思是如果我收到:00012 它将插入为12
有没有一种方法可以将列更新为始终将0 向左填充一个固定数字,这意味着如果我们得到12,它将自动生成00012 的值。
或
在将变量插入表之前由存储过程接收到变量时,有没有办法对变量执行此操作。
大致如下:
SET @zeroPaddedFixedNum = LeftPad(@numberRecieved, '0', 5);
此外,我现在需要停止插入更多数字并更新所有当前长度不正确的数字。有什么建议么?
也许只是我的谷歌能力失败了,但我尝试搜索了很多页面。
【问题讨论】:
-
您要插入的列的类型是什么?听起来您的存储过程需要
INT,而您正在向它发送VARCHAR,它正在被隐式转换。VARCHAR的值'01234'转换为INT的1234。您能否发布存储过程的代码以及您对它的调用以及一些示例输入值? -
这是一个开始,非常感谢您的回复。该数字被捕获为字符串并发送到存储过程。存储过程确实需要一个 int 值。列本身也是一个 int 值。您认为将列更新为 varchar,并将存储的 proc 变量更新为 varchar 会解决问题吗?如果需要,我可以添加插入语句。
-
是的,如果你想存储像
01234这样的值,你不能使用INT类型。将列更改为VARCHAR(5)并按照下面Madhivanan 的答案执行INSERT。 -
@3N1GM4 但是 - 如果这些值 是 数字 - 不应该更改类型,因为我需要一个特殊 SP 的特殊格式。而是动态填充...
标签: sql sql-server stored-procedures sql-server-2012