为查询中的每个结果调用表值函数

Jam*_*mes 5 sql stored-procedures sql-server-2005

说我有这样的查询:

SELECT X FROM Table WHERE Y = 'Z'
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

我已将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)
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 8

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

DECLARE @sql nvarchar(max)

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

EXEC (@sql)
Run Code Online (Sandbox Code Playgroud)

在编辑之前(到TVF),您可以更改SP以继续填充临时表.

编辑后到TVF,您可以使用交叉申请:

SELECT F.*
FROM Tbl CROSS APPLY dbo.TVFName(Tbl.AField) F
WHERE Tbl.AField2 = 'SomeIdentifier'
Run Code Online (Sandbox Code Playgroud)

这会将每次调用Tbl.AField的所有"表结果"返回到单个结果集中