ALTER PROCEDURE [dbo].[nncvb_AddNNCVB_Eat_Ca]
(@sm nvarchar(50),
 @Name nvarchar(50),
 @Lang nvarchar(50),
 @ToId int,
 @tb nvarchar(50)
)if @sm=''execute('insert into' +  @tb + '(Name) values ('+@Name+')')
当用程序写入数据时,老提示:
在此上下文中不允许使用名称 "XX"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
如果我的存储过程写成这样:
insert into NNCVB_CountryCity(Name) values(@Name)
就没有错误了。怎么解决啊?我语句写错了吗?

解决方案 »

  1.   

    execute('insert into ('+  @tb + ')(Name) values ('+@Name+')')
      

  2.   

    ALTER PROCEDURE [dbo].[nncvb_AddNNCVB_Eat_Ca] 
    (@sm nvarchar(50), 
     @Name nvarchar(50), 
     @Lang nvarchar(50), 
     @ToId int, 
     @tb nvarchar(50) 
    ) if @sm='' 
    begin
       Declare @Sql nvarchar(400)
       Set @Sql='insert into' + @tb + ' (Name) values ('''+@Name+''') '
       Exec(@Sql)
    End
      

  3.   

     晕。('''+@Name+''') ' 
    这样就行了,
    但不董为什么要这样写??
      

  4.   

    因为@Name本身带入的值是Varchar类型。插入数据时需要加引号。