实际上
declare @TableName varchar(30)
set @tablename='table1'
select * from @TableName
在sql 运行时会翻译为
select * from 'table1'
而正常可以运行语句为
select * from table
也就是说当将表名或者column定义为varchar形式时在sql翻译后都会在字段名上
加一对‘’----单引号从而与sql定义的格式不符。
报错-“Incorrect syntax near 'table1'”
解决这一问题的方法是消除变量中的引号
上面的各种方法实际上都是基于这一目的
如
create procedure hi_sp (@_id varchar(10)) as
declare
@SQLstmt varchar(1000)
begin
@SQLstmt='select * form '+@_id
exec(@SQLstmt)
及
exec ('select * from ' + @TableName)(好像少了一些东西所以运行不了)
当然方法有很多我自己使用的一个方法是
declare @tablename sysname, @sqll sysname
set @tablename='causer'
set @sqll='select * from '+@tablename
EXECUTE sp_executesql @sqll
如果要在程序中调用参数可以
declare @tablename sysname, @sqll sysname
set @tablename=:tablename
set @sqll='select * from '+@tablename
EXECUTE sp_executesql @sqll
设置tablename的形式为ftstring
然后再程序中直接调用就可以了。