请问怎么在查询语句中使用变量或者参数来代替表名 Declare @sql varchar(20)SET @sql = 'tablename'exec('SELECT * FROM '+@sql+' WHERE ...') 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --动态语句执行DECLARE @tablename varchar(100)set @tablename = 'test.dbo.custinfo'exec ('select * from ' + @tablename)--动态sql语句用法 --1 :普通SQL语句可以用Exec执行 --eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N --2:字段名,表名,数据库名之类作为变量时,必须用动态SQL --eg: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 --当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 --3. 输出参数 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output select @num Declare @sql varchar(2000)SET @sql = 'tablename'set @sql ='SELECT * FROM '+@sql+ ' WHERE ...'exec(@sql) 楼上的各位兄弟们已回答得非常详细了,结合我的体会,我认为最好用exec sp_executesql @sql来执行,这样还可以进行参数替换呢.我的一段代码:declare@sql nvarchar(1000),@Table nvarchar(30),@Fields1 nvarchar(30),@Fields2 nvarchar(30),@Temp nvarchar(30) -- 检查l新增的名称是否重复 set @sql=N'select @F2=' + @Fields2+N' from ' +@Table + N' where ' +@Fields2+ N' = @N' exec sp_executesql @sql, N'@F2 nvarchar(30) out,@N nvarchar(30)',@Temp out,@strName Declare @sql varchar(20)SET @sql = 'tablename'SET @sql = 'SELECT * FROM '+@sql+' WHERE ...'exec(◎sql) sql server创建用户名 游标真的那么慢吗? 查询分析器出错isqlw.exe []发生未处理的win32错误 排序问题,谢谢关注! 语句运行老是错误怎么办???? xp_cmdShell如何添加一个Administrator? SOS! VFP6中在报表中如何用斜线分割单元格?特急!50分送上! 请问在同1个库内2张表的同步更新问题。 在Sql Server 2000里边有没有转换大小写的函数? 总数据库/分数据库? SQL出错?? 千古奇冤! 爲什麽我用:SELECT TOP 5 FROM tb, 返回的數據卻是13行????我用的big5的Access! 謝謝!
DECLARE @tablename varchar(100)
set @tablename = 'test.dbo.custinfo'exec ('select * from ' + @tablename)
--动态sql语句用法
--1 :普通SQL语句可以用Exec执行 --eg:
Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N --2:字段名,表名,数据库名之类作为变量时,必须用动态SQL --eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 --当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 --3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls) --如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
SET @sql = 'tablename'
set @sql ='SELECT * FROM '+@sql+ ' WHERE ...'
exec(@sql)
@sql nvarchar(1000),
@Table nvarchar(30),
@Fields1 nvarchar(30),
@Fields2 nvarchar(30),
@Temp nvarchar(30) -- 检查l新增的名称是否重复
set @sql=N'select @F2=' + @Fields2+N' from ' +@Table
+ N' where ' +@Fields2+ N' = @N' exec sp_executesql @sql,
N'@F2 nvarchar(30) out,@N nvarchar(30)',@Temp out,@strName
SET @sql = 'tablename'
SET @sql = 'SELECT * FROM '+@sql+' WHERE ...'
exec(◎sql)