我需要一个select语句在其子句中运行另一个select语句,结果(只有一个记录)是外部select的表名。
为此,我不能使用存储过程,exec或@ variables。
此外,查询文件必须以“select”开头,并且只包含该语句。
我知道有更好的方法可以完成最终结果,但是供应商的向导要求查询必须通过嗅探来执行除单个select语句之外的任何操作。令人沮丧的是,但这就是我们必须要做的一切。
这是我想要做的一个例子:
select
plan.TransactionID,
plan.PlanName,
sum(plan.Value) as Rate
from
(select 'dbo._Result' + ltrim(str(CalculationID)) from dbo.Calculation where Name =
'TPRL Transaction Plan Rates'
) Plan
当然,这不起作用。但是,这也不是:
select
plan.TransactionID,
plan.PlanName,
sum(plan.Value) as Rate
from
exec(select 'dbo._Result' + ltrim(str(CalculationID)) from dbo.Calculation where Name = 'TPRL Transaction Plan Rates') Plan
尽管如此,这本身确实将我想要的表拉回到结果集中:
exec(select 'dbo._Table' + ltrim(str(CalculationID)) from dbo.Calculation where Name = 'TPRL Transaction Plan Rates')
我需要做的就是将结果视为上面的文字(如宏观替换),但不会那样。
tsql中有没有办法做到这一点?
答案 0 :(得分:1)
您的第一个查询应该有效。您可以在FROM语句中执行子查询。你得到了什么样的错误?
在了解了需求之后,我相信需要动态SQL。
答案 1 :(得分:1)
不,这不能仅在非动态TSQL中完成。在TSQL中,表名不能是变量或参数化,只能通过动态TSQL完成。
动态TSQL只能使用EXEC('sql command')
或sp_ExecuteSql(..)
。
可能的解决方法: 除非您使用的工具具有自己的宏替换,否则