在另一个中使用的查询的Transact SQL结果

时间:2011-02-21 08:35:58

标签: sql sql-server stored-procedures

我需要从表中查询表名。

var tableName = "select tableName from tableList where type='A';"

然后在另一个查询中使用该表名。

"select * from" + tableName

Transact SQL /存储过程对我来说是新的,所以任何帮助都将不胜感激。我没有设计数据库,遗憾的是不能真正改变它,以便像我希望的那样更好的设计!

我的问题是 - 这是否可能来自一个存储过程,如果是这样,任何人都可以模拟我是如何做到的。 或者,如果有任何人可以想到的更好的方式(重新设计数据库吧!)

由于

4 个答案:

答案 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