CREATE PROCEDURE login
  @m int=9 output
 AS
  exec (' set '+''''+convert(varchar,@m)+''''+'=1' )
  print @m
GO

解决方案 »

  1.   

    用exec语句并不能达到你的要求。请参考sp_executesql的帮助。
      

  2.   

    CREATE PROCEDURE login
      @m int=9 output
    ASexec sp_executesql N'set @m=1',N'@m int output',@m output
    print @m
    GO
    exec [login]
    drop PROCEDURE login
      

  3.   

    在动态语句中,所的赋值与输出参数@m不是一个变量,动态的要单独定义,带不回来:
    CREATE PROCEDURE login
      @m int output
     AS
      set @m=9
      exec ('declare @m int set @m=1' )
      print @m   \\还是9
    GO