在varchar之后打印Int

时间:2015-07-01 23:14:07

标签: sql-server stored-procedures

为什么我无法打印DeptID这是一个整数?

Alter proc spGetNameByID
    @ID int,
    @Name varchar(50) output,
    @Gender varchar (50) output,
    @DeptID int output
as
begin
    Select 
        @Name = Name, @Gender = Gender , 
        @DeptID = DeptID 
    from 
        tblEmployee 
    where 
        ID = @ID
end

Declare @GetName varchar(50), @GetGender varchar(50), @GetDeptID int

Execute spGetNameByID 1, @GetName out, @GetGender out, @GetDeptID out

Print 'Name of Employee is ' + @GetName + ' Gender is ' + @GetGender + 'Dept ID is ' + @GetDeptID

我的错误是

  

Msg 245,Level 16,State 1,Line 3
  转换varchar值时转换失败'员工姓名是John性别是MaleDept ID是'数据类型int。

3 个答案:

答案 0 :(得分:4)

@GetDeptID是一个Integer值,您需要在将其连接到字符串之前将其转换为varchar

Print 'Name of Employee is ' + @GetName + ' Gender is ' 
                  + @GetGender + 'Dept ID is ' + CAST(@GetDeptID AS VARCHAR(10))

原因

如果在连接之前没有显式地将Int值转换为varchar,INT是更高的预先科学数据类型,SQL Server会尝试将您的字符串转换为INT并失败,因此错误消息。

答案 1 :(得分:0)

考虑使用严重性为零的RAISERROR。这将提供与PRINT类似的功能,并允许您使用替换参数。

RAISERROR('Name of Employee is %s Gender is %s Dept ID is %d', 0, 0, @GetName, @GetGender, @GetDeptID);

答案 2 :(得分:0)

您需要将数值转换为String,因为print只能按类型将唯一值理解为参数。

Print 'Name of Employee is ' + @GetName + ' Gender is ' + @GetGender + 'Dept ID is ' + Convert(varchar(18), @GetDeptID)