环境:xp/sql server2005create table users(user_Name varchar(20),User_nb varchar(20),user_Nc nvarchar(20))
--drop table users
--select * from users
insert into users values('xjs','xjs','禁药')
--drop proc useproc
create proc useproc
@msg nvarchar(20) output
as
begin
    select @msg = user_Nc from users where user_Name='xjs'
    print(@msg)
    return @msg
enddeclare @msg nvarchar(20)
exec useproc @msg居然报下面的错误,为什么???????????禁药
消息 245,级别 16,状态 1,过程 useproc,第 7 行
在将 nvarchar 值 '禁药' 转换成数据类型 int 时失败。

解决方案 »

  1.   

    create proc useproc
    @msg nvarchar(20) output
    as
    begin
        select @msg = user_Nc from users where user_Name='xjs'
        --print(@msg)
        --return @msg
    end
    godeclare @msg nvarchar(20)
    exec useproc @msg output
    select @msg
      

  2.   

    2楼的,别人就要一个返回值,你把retrun给去掉了~~~~~
      

  3.   

    不需要

        print(@msg)
        return @msg
      

  4.   

    是你不了解语法吧。。1L正解。。PROC 用output输出返回值declare @msg nvarchar(20)
    exec useproc @msg output
    select @msg
      

  5.   

    消息 245,级别 16,状态 1,过程 useproc,第 7 行
    在将 nvarchar 值 '禁药' 转换成数据类型 int 时失败。

    这个错误就是因为你使用了return @msg
    @msg是字符串 但是存储过程只能返回INT类型 
      

  6.   

    存储过程中return 返回的是INT型数据。
      

  7.   

    use test
    go
    if exists(select * from sysobjects where id=object_id('users'))
    begin
    drop table users
    drop proc useproc
    end
    create table users(user_Name varchar(20),User_nb varchar(20),user_Nc nvarchar(20))
    --drop table users
    --select * from users
    insert into users values('xjs','xjs','禁药')
    --drop proc useproc
    go  ---这里要加上 go
    create proc useproc
    @msg nvarchar(20) output
    as
    begin
        select @msg = user_Nc from users where user_Name='xjs'
        print(@msg)
        --return @msg  存储过程里不能有return语句
    end
    go
    declare @msg nvarchar(20)
    exec useproc @msg output
    select @msg
      

  8.   

    在这里先要感谢丰云!!帮我发这个贴子,万分感谢,原来我们的错误在于,不明白SQL存储过程的返回值是INT型的!!!
      

  9.   

    ....sql返回值不象开发语言能返回字符串...