我有一个表值函数,它返回有关特定帐户的一些详细信息。像这样的东西。复杂得多,但你明白了。如果这有所不同(不是内联语句),它是一个多行 TVF
select * from dbo.TBFDetailsByAccountKey(1234)
-----------------------------------------------
date | amount | detail |
-----------------------------------------------
4/1/2012 | 10.23 | payment stuff |
4/2/2012 | 12.40 | other stuff |
4/2/2012 | 14.23 | second pmt today |
我现在需要在一系列 UNION ALL 语句中重复调用相同的 TVF,以便返回一组存款中包含的所有帐户密钥的详细信息。有没有办法在不使用动态 sql 的情况下做到这一点?
我目前的方法是这样......但它使用动态sql,我一直认为应该有更好的“非动态”方式。
DECLARE @pResult varchar(max)
SELECT @pResult = COALESCE(@pResult + ' UNION ALL ', '') +
'SELECT * FROM dbo.TBFDetailsByAccountKey(' +
Cast(AccountKey AS VarChar(25)) + ')'
FROM Account WHERE DepositKey = @pDepositKey
EXEC(@pResult) /* execute dynamic sql created above */