Sql-Server
SQL Server:sp_describe_first_result_set 在儲存過程中有多個選擇
我正在使用
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)
該文件有一個範例,其中由於數據類型不同而發生錯誤,例如您的情況。