Sql-Server

SQL Server:sp_describe_first_result_set 在儲存過程中有多個選擇

  • March 23, 2021

我正在使用sp_describe_first_result_set從儲存過程中檢索元數據並出現以下錯誤:

Msg 11512, Level 16, State 1, Procedure dbo.sp_describe_first_result_set, Line 1 [Batch Start Line 0]
The metadata could not be determined because the statement 'SELECT 1' in procedure 'test' is not compatible with the statement 'SELECT 'str'' in procedure 'test'.

這個 SP 可以根據參數返回不同的數據集:

ALTER PROCEDURE [dbo].[test]
   @test NVARCHAR(50) = 'test'
AS
BEGIN
   SET NOCOUNT ON;

   IF (@test = 'test')
   BEGIN
       SELECT 1
   END
   ELSE
   BEGIN
       SELECT 'str'
   END
END

看起來像sp_describe_first_result_set一個UNION查詢,因為如果兩個查詢都返回相同的 col 模型,則該過程有效。

我什至試圖@parameter像這樣通過:

DECLARE @test NVARCHAR(50) = 'test2'
EXEC [dbo].[sp_describe_first_result_set]
   @tsql = N'test @test = @test'
   ,@params = N'@test NVARCHAR(50)'

但它不起作用。

有沒有辦法讓它工作?

該行為是預期的,並在備註部分sp_describe_first_result_set下的文件中進行了描述:

對於每個控制流路徑,返回結果集的第一條語句(如果有)由 sp_describe_first_result_set 確定。

當在批處理中找到多個可能的第一條語句時,它們的結果可能在列數、列名、可空性和數據類型方面有所不同。此處更詳細地描述瞭如何處理這些差異:

$$ … $$

  • 如果數據類型不同,則會拋出錯誤並且不返回任何結果,但以下情況除外:

+ **varchar(a)varchar(a’)**其中 a’ > a。 + varchar(a)varchar(max) + **nvarchar(a)nvarchar(a’)**其中 a’ > a。 + nvarchar(a)nvarchar(max) + **varbinary(a)varbinary(a’)**其中 a’ > a。 + varbinary(a)varbinary(max)

該文件有一個範例,其中由於數據類型不同而發生錯誤,例如您的情況。

引用自:https://dba.stackexchange.com/questions/287539