从存储过程中丢失前导0

时间:2013-02-20 22:25:02

标签: sql-server sql-server-2008

我正在尝试从城市和州的价值中获取正确的邮政编码。但我正在从邮政编码中失去领先的0。

实施例

create procedure sp_getCorrectvalue
as
Begin
     declare @value as nvarchar(5)
     set @value = '00254'
     return @value
End

declare @getValue as nvarchar(5)
Exec @getValue = sp_getCorrectvalue
select @getValue as zipCode

它应该返回00254,但它返回254这是不正确的

请帮忙 感谢

3 个答案:

答案 0 :(得分:7)

过程的返回值只能是int,因此在返回时会转换它。要返回一个字符串,您需要在结果或输出参数中返回它。

答案 1 :(得分:4)

你应该创建一个函数

CREATE FUNCTION fn_getCorrectvalue()
RETURNS NVARCHAR(5)
AS
BEGIN
     declare @value as nvarchar(5)
     set @value = '00254'
     return @value
END

http://sqlfiddle.com/#!3/29fa9/1/0

演示

存储过程返回一个整数(http://msdn.microsoft.com/en-us/library/ms174998.aspx

  

存储过程可以将整数值返回给调用过程或应用程序

答案 2 :(得分:0)

实际上我在Mysql中遇到了类似的问题 我有一个存储过程,其中学生ID为Char(8)。如果ID是&00; 00002563'并且具有Out那是VarChar。

如果我通过&00; 00002563'并将其传递给put参数......如果得到的话,那就是' 2563'在varchar。

该程序的初衷是让学生输入他们的身份证和处理程序,并确定他们分配的宿舍和房间号码(如果找到)。

这些都没有找到..我怀疑原因是varchar正被转换为INT。