不可以。
可以使用exec ("Insert Into " + @TabName + "(" + sID + "," + @sColName + ") Values(" + @sID + "," + @sName + ")")
可以使用exec ("Insert Into " + @TabName + "(" + sID + "," + @sColName + ") Values(" + @sID + "," + @sName + ")")
exec('')
再如:
declare @Val varchar(500)
set @Val='1,2,3'
delete tabel1 where id in (@Val)就是错的
exec('delete tabel1 where id in ('+@Val+')')就是对的
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)。这里出了什么错?
exec('Insert Into '+@TabName+'(sID,'+@sColName+')Values('+@sID+','+@sName+')')
要改成
exec('Insert Into '+@TabName+'(sID,'+@sColName+')Values('+@sID+','''+@sName+''')')@sName是char类型的字段,在用动态执行的时候,应该用单引号括起来。搞了半天,居然是少了一对单引号,sql的错误提示真是莫名其妙^_^谢谢楼上各位的帮助!