在SQL语句中用变量来作为表名进行数据的访问

时间:2022-02-24 07:42:29
有没有方法避开execute执行串而能够使用变量的方式来访问表中的数据,例如:
declare @tablename varchar(20)
set @tablename='abc'
select * from @tablename

我的一般方法是:
declare @tmpstr varchar(500)
set @tmpstr='select * from '+@tablename
exec(@tmpstr)
这种方式虽然能够解决一般问题,但对于很多问题难以解决,现向各位高手咨询!

6 个解决方案

#1


declare @tmpstr varchar(500)
set @tmpstr='select * from '+@tablename
exec(@tmpstr)
--这种方法不错呀,还有什么难以解决的问题!

#2


这种动态的写法只能在后台实现,

所以当然有局限性了。

其实养成把事务处理放在后台的习惯还是挻好的

#3


我的问题是,有几张表的前几个字段是相同的,比如说tjnf,tjyf,dwid在表a1和表a2等一系列的表中均存在,(tjnf表示年份,tjyf表示月份,dwid表示部门编号),现要求对于任意的表检测某时段某个部门是否有数据存在,除了上述使用的exec方法外还有没有别的方法,其实上述方法我早就用过,只不过想寻求一种象我上面说到的一种办法求解。

#4


这种动态的写法只能在后台实现
--------------
写成存储过程就可以在前台调用,如可以把表名作为参数:
create proc p_t 
@tablename sysname
as
declare @tmpstr varchar(500)
set @tmpstr='select * from ' + @tablename
exec(@tmpstr)
go

-- 调用
exec p_t 'pubs..authors'

-- 前台调用(不同的语言写法不同)
set rs = conn.execute("exec p_t " & tablename)

#5


有没有方法避开execute执行串而能够使用变量的方式来访问表中的数据
--------
你在前台程序中可以啊。
只要构造如:
sql = "select * from " + tablename
这样的字符串,然后执行就可以了。

#6


str="select * from "+tablename+" "

#1


declare @tmpstr varchar(500)
set @tmpstr='select * from '+@tablename
exec(@tmpstr)
--这种方法不错呀,还有什么难以解决的问题!

#2


这种动态的写法只能在后台实现,

所以当然有局限性了。

其实养成把事务处理放在后台的习惯还是挻好的

#3


我的问题是,有几张表的前几个字段是相同的,比如说tjnf,tjyf,dwid在表a1和表a2等一系列的表中均存在,(tjnf表示年份,tjyf表示月份,dwid表示部门编号),现要求对于任意的表检测某时段某个部门是否有数据存在,除了上述使用的exec方法外还有没有别的方法,其实上述方法我早就用过,只不过想寻求一种象我上面说到的一种办法求解。

#4


这种动态的写法只能在后台实现
--------------
写成存储过程就可以在前台调用,如可以把表名作为参数:
create proc p_t 
@tablename sysname
as
declare @tmpstr varchar(500)
set @tmpstr='select * from ' + @tablename
exec(@tmpstr)
go

-- 调用
exec p_t 'pubs..authors'

-- 前台调用(不同的语言写法不同)
set rs = conn.execute("exec p_t " & tablename)

#5


有没有方法避开execute执行串而能够使用变量的方式来访问表中的数据
--------
你在前台程序中可以啊。
只要构造如:
sql = "select * from " + tablename
这样的字符串,然后执行就可以了。

#6


str="select * from "+tablename+" "