在另一个数据库中使用的查询的Transact-SQL结果

在另一个数据库中使用的查询的Transact-SQL结果,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我需要从表中获取要查询的表名 var tableName = "select tableName from tableList where type='A';" 然后在另一个查询中使用该表名 "select * from" + tableName Transact-SQL/存储过程对我来说一般都是新的,因此如果有任何帮助,将不胜感激。我没有设计数据库,不幸的是,我不能真正改变它成为一个更好的设计,因为我很想 我的问题是——这是否可以从一个存储过程中实现,如果可以,是否有人可以模拟我将如何实现

我需要从表中获取要查询的表名

var tableName = "select tableName from tableList where type='A';"
然后在另一个查询中使用该表名

"select * from" + tableName
Transact-SQL/存储过程对我来说一般都是新的,因此如果有任何帮助,将不胜感激。我没有设计数据库,不幸的是,我不能真正改变它成为一个更好的设计,因为我很想

我的问题是——这是否可以从一个存储过程中实现,如果可以,是否有人可以模拟我将如何实现这一点。 或者,如果有任何人都能想到的更好的方法(除了重新设计数据库!)


谢谢

你可以直接写

select * from (select tableName from tableList where type='A') X 

你可以直接写

select * from (select tableName from tableList where type='A') X 
可能通过动态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
可能通过动态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

您可以按照@kevchadders的建议使用
exec
,也可以使用
sp_executesql
,阅读动态SQL的优秀解释。

您可以按照@kevchadders的建议使用
exec
,也可以使用
sp_executesql
,请阅读有关动态SQL的精彩解释。

您应该使用动态SQL来实现这一点。 基本上,您可以使用sp_executesql或exec执行查询,并将结果存储到一个类似于staging的表中,以便进一步处理:

declare @sql = varchar(8000);
select @sql = 'insert into resulttbl select * from ' + @tableName;
exec sp_executesql(@sql);
-- further process using resulttbl


无论如何,您应该阅读以下文章以获得更好的解释:

您应该使用动态SQL来实现这一点。 基本上,您可以使用sp_executesql或exec执行查询,并将结果存储到一个类似于staging的表中,以便进一步处理:

declare @sql = varchar(8000);
select @sql = 'insert into resulttbl select * from ' + @tableName;
exec sp_executesql(@sql);
-- further process using resulttbl


无论如何,您应该阅读以下文章以获得更好的解释:

为什么要使用临时表?使用
sp\u executeql
时,不需要执行此操作。为什么这个临时表没有临时表(名称以w/a#开头)?@Ocaso Protal:我假设OP会在后续查询中使用结果这就是为什么要使用sp_executesql,这里有@params参数来传递和获取参数。工作起来很有魅力(但有时看起来很混乱),我不得不经常使用sp_executesql。尽管如此,临时表在大多数情况下是存储中间结果的更好解决方案。为什么使用临时表?使用
sp\u executeql
时,不需要执行此操作。为什么这个临时表没有临时表(名称以w/a#开头)?@Ocaso Protal:我假设OP会在后续查询中使用结果这就是为什么要使用sp_executesql,这里有@params参数来传递和获取参数。工作起来很有魅力(但有时看起来很混乱),我不得不经常使用sp_executesql。但尽管如此,临时表在大多数情况下是存储中间结果的更好解决方案。