在另一个数据库中使用的查询的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。但尽管如此,临时表在大多数情况下是存储中间结果的更好解决方案。