不可以。
可以使用exec ("Insert Into " + @TabName + "(" + sID + "," + @sColName + ") Values(" + @sID + "," + @sName + ")")

解决方案 »

  1.   

    所有关系到查询的表达试都要动态
    exec('')
    再如:
    declare @Val varchar(500)
    set @Val='1,2,3'
    delete tabel1 where id in (@Val)就是错的
    exec('delete tabel1 where id in ('+@Val+')')就是对的
      

  2.   

    我按照大家的提示更改为:
    Create Procedure dt_AModeAdd 
    (@TabName nvarchar(20),@sID tinyint,@sColName nvarchar(20),@sName nvarchar(20)) As
    exec('Insert Into '+@TabName+'(sID,'+@sColName+')Values('+@sID+','+@sName+')')
    Go已经顺利通过语法检查,并且执行成功,可是调用出了问题,我用如下语句调用:
    exec dt_amodeadd'计量类型表',50,'sUnit','吨'服务器: 消息 128,级别 15,状态 1,行 1
    在此上下文中不允许使用 '吨'。此处只允许使用常量、表达式或变量。不允许使用列名。在我进行调用的语句里,“计量类型表”是我想进行数据添加的表,50代表要添加的计量类型的顺序,“sUnit”代表列名,“吨”代表具体添加的计量类型。在计量类型表中,有三个字段,一个是UnitID—自动编号int,一个是sID—排列顺序int,一个是sUnit—具体的计量单位
    navrchar(20)。这里出了什么错?
      

  3.   

    只能使用动态执行SQL语句的方法
      

  4.   

    exec dt_amodeadd'计量类型表',50,'sUnit',N'吨' 试试
      

  5.   

    呵呵,后一个问题总算解决了,这一句
    exec('Insert Into '+@TabName+'(sID,'+@sColName+')Values('+@sID+','+@sName+')')
    要改成
    exec('Insert Into '+@TabName+'(sID,'+@sColName+')Values('+@sID+','''+@sName+''')')@sName是char类型的字段,在用动态执行的时候,应该用单引号括起来。搞了半天,居然是少了一对单引号,sql的错误提示真是莫名其妙^_^谢谢楼上各位的帮助!