【发布时间】:2015-05-16 12:15:04
【问题描述】:
我在创建使用用户定义类型的存储过程并构建要在存储过程结束时执行的动态查询时遇到了问题。 我以前也这样做过,但这次不同。我正在构建一个动态聚合 SELECT 语句,该语句必须(动态)调用另一个存储过程并内联使用结果。
由于其他存储过程也使用动态SQL,所以不能在用户自定义函数中定义。
我现在将展示一个 SQL 代码中的问题示例,希望对您有所帮助。
第一个存储过程:
CREATE PROCEDURE [dbo].[SP1]
...--(some uder defined types)
AS
DECLARE @SQLQuery AS NVARCHAR(MAX);
...--(some cursors used in assembling the dynamic query)
...--(at some point I have a check whether there are additional filter criteria)
SET @SQLQuery = @SQLQuery + '(SELECT COUNT([Column]) FROM [TableX]';
IF(EXISTS(SELECT TOP (1) FilterCriteria FROM @additionalCriteriaTable))
BEGIN
SET @SQLQuery = @SQLQuery = 'AND [IdOfTableX] IN (EXEC [dbo].[SP2] @param1, @param2 ...)';
END
SET @SQLQuery = @SQLQuery + ')';
存储过程 2 用于确定 [TableX] 的哪些行符合任何给定条件,也使用一些游标和动态查询。 SP2 返回这些行的 IDS。
很明显,我以错误的方式处理此问题,因为您无法从内联存储过程中进行选择。但是,您可以使用用户定义的函数,但不能使用我需要的动态 SQL。 有没有办法让存储过程的结果可以内联使用,也许是通过使用一种定义存储过程只返回特定结果集的注释形式?
我希望你们中的一些人可以帮助我,
干杯杰伦
【问题讨论】:
标签: sql-server tsql stored-procedures user-defined-functions