有一存储过程如下create proc test
@a int
as
declare @sql varchar(1000)
set @sql='create view myview as select * from tb where id=@a'
exec(@sql)请问哪出错了???

解决方案 »

  1.   

    create proc test
    @a int
    as
    declare @sql varchar(1000)
    set @sql='create view myview as select * from tb where id= '+ @aexec(@sql)
      

  2.   

    像这种组合的动态SQL 是应该调试的!只有调试才知道问题出哪儿了。
      

  3.   


    exec test 1 运行时还是出错
      

  4.   

    @a 是int 类型,@sql 是varchar类型,所以拼到一起的时候,要把int 类型转化成varchar类型
    CREATE proc test
    @a int
    as
    declare @sql varchar(1000)
    set @sql='create view myview as select * from tb where id=' +CAST(@a AS VARCHAR)
    exec(@sql)
      

  5.   

    这么快结贴了,有点嫌疑,其实这个回答应该是有问题的,问题在于varchar没有指定长度,那么默认就是1了,所以@a可能会被截断。