我需要从表中查询表名。
var tableName = "select tableName from tableList where type='A';"
然后在另一个查询中使用该表名。
"select * from" + tableName
Transact SQL /存储过程对我来说是新的,所以任何帮助都将不胜感激。我没有设计数据库,遗憾的是不能真正改变它,以便像我希望的那样更好的设计!
我的问题是 - 这是否可能来自一个存储过程,如果是这样,任何人都可以模拟我是如何做到的。 或者,如果有任何人可以想到的更好的方式(重新设计数据库吧!)
由于
答案 0 :(得分:2)
可能通过动态SQL
DECLARE @String AS VARCHAR(8000)
DECLARE @TableName AS VARCHAR(50)
DECLARE @Results AS VARCHAR(8000)
SET @TableName = (select top 1 tableName from tableList where type='A')
SET @String = 'Select * from ' + @TableName
SET @Results = @String + @TableName
EXEC @Results
答案 1 :(得分:1)
您可以使用exec
作为@kevchadders建议,也可以使用sp_executesql
,阅读The Curse and Blessings of Dynamic SQL以获得有关动态SQL的绝佳说明。
答案 2 :(得分:0)
你可以直接写
select * from (select tableName from tableList where type='A') X
答案 3 :(得分:0)
您应该使用动态SQL来实现这一目标。 基本上,您使用sp_executesql或exec执行查询,并将结果存储到有形的临时表中以进一步处理:
declare @sql = varchar(8000);
select @sql = 'insert into resulttbl select * from ' + @tableName;
exec sp_executesql(@sql);
-- further process using resulttbl
或者
insert into resulttbl
exec ('select * from ' + @tableName);
-- further process using resulttbl
无论如何,您应该阅读以下文章以获得更好的解释:The Curse and Blessings of Dynamic SQL