一张表,里面只有两列,分别是Id,name.id自动增长。我想通过储存过程把表名和和属性都用参数传递。但是执行报了
Msg 214, Level 16, State 2, Procedure sp_executesql, Line 10
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'. 

希望哪位大哥帮忙解决。小弟感激万分!
主要遇到就是不能把表名当参数传递。
以下是小弟测试的代码
create procedure tests
@name varchar(20),
@tableName varchar(50) --表名--
as
begin
declare @ta varchar(25);
declare @Sql varchar(150);
set @ta=@name;
set @Sql='insert into '+@tableName+'(name)values('+(@ta)+')'
exec sp_executesql @Sql
end

解决方案 »

  1.   

    代码没贴完吧
    Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'. 
    @statement在哪
      

  2.   

    @statement是说这语句中的参数要用'ntext/nchar/nvarchar'类型,并不是有一个@statement参数
      

  3.   


    create procedure tests
    @name varchar(20),
    @tableName varchar(50) --表名--
    as
    begin
    declare @Sql nvarchar(150);
    print '@name='+@name
    print '@tableName='+@tableName
    set @Sql='insert into '+@tableName+'(name) values('''+@name+''')'
    print @sql
    exec sp_executesql @Sql
    endexec tests 'aaa','tba'
    刚试 了下,
    表只能了两个字段一个ID自增长一个NAME VARCHAR(50)
    没问题.
      

  4.   

    flyerwing兄 刚刚分不够分,现在补给你了。谢谢!