1、
SELECT 
         @RegionID = '9',
        @RegionDescription = 'shanghai'
-->
SELECT 
         @RegionID = '9',
        @RegionDescription = N'shanghai'
还有,表结构和declare定义的类型是否相同?2、这样有问题,需要值返回一条记录:CREATE PROCEDURE test 
@id  int ,
@name char(10) output ,
@address char(40) output,
@age int(4) output
as 
select
@name = name ,
@address = address ,
@age = age
from student
where id=@id
go

解决方案 »

  1.   

    1、Region表 插入 
    CREATE PROCEDURE test 
    asBEGIN
    DECLARE
    @RegionID  int,
    @RegionDescription  nchar(50) SELECT 
             @RegionID = 9,
            @RegionDescription = N'shanghai'
             INSERT INTO dbo.region
    (
    RegionID,
                        RegionDescription
    )
    VALUES
    (        @RegionID ,
                       @RegionDescription 


    ) IF @@ERROR = 0
    RETURN 0
    ELSE
    RETURN 1
    ENDGO
      

  2.   

    2@age int(4) output
    -->
    @age int output
      

  3.   

    2、student表三个字段输出
    CREATE PROCEDURE test 
    @name char(10) output ,
    @address char(40) output,
    @age int output
    as 
    select
    @name = name ,
    @address = address ,
    @age = age
    from student
      

  4.   

    1.DECLARE
    @RegionID  int,  -----int(4),
    2.加条件或用TOP 1使结果记录唯一
    select top 1
    @name = name ,
    @address = address ,
    @age = age
    from student
      

  5.   

    结果记录不唯一在SQL Server中并不会出错,
    它只会抓取最上面的一笔。
    其实两个地方的int(4)都改成int就可以了。
      

  6.   

    1、
       @RegionID  int(4) ---改---> @RegionID int2、
       @age int(4) output  ---改---> @age int output经过上面的修改之后,两个存储过程的语法检查都能通过,并且执行也没有问题。