说我有一个这样的查询:

SELECT X FROM Table WHERE Y = 'Z'

如何使用上述查询中的每个X作为参数执行存储过程?

更新

我已将SP更改为表值函数。因此,对于每次调用该函数,它将返回一个表。我需要做的是将所有这些结果存储在一个临时表中,并让我的SP返回该表。

解决方案

最终,在@cyberkiwi的一些帮助下,使它能够起作用。这是我的最终解决方案:
DECLARE @Fields TABLE (
    Field int)

INSERT INTO @Fields (X) SELECT * FROM tvf_GetFields(@SomeIdentifier)
SELECT * FROM @Fields
CROSS APPLY dbo.tvf_DoSomethingWithEachField([@Fields].Field)

最佳答案

您可以从中生成一个批处理语句,然后执行它

DECLARE @sql nvarchar(max)

SELECT @sql = coalesce(@sql + ';', '')
              + 'exec sprocname ' + QuoteName(AField, '''')
FROM Table
WHERE AField2 = 'SomeIdentifier'
  AND AField is not null

EXEC (@sql)

在编辑(到TVF)之前,您可能已经更改了SP以继续填充临时表。

对TVF进行后期编辑后,您可以使用交叉申请:
SELECT F.*
FROM Tbl CROSS APPLY dbo.TVFName(Tbl.AField) F
WHERE Tbl.AField2 = 'SomeIdentifier'

它将Tbl.AField的每次调用返回的所有“表结果”返回到单个结果集中

10-07 14:27