长话短说,我有一个第三方应用程序,当它无法检索查询/存储过程的元数据时,它的行为会有所不同。
众所周知sys.sp_describe_first_result_set当存储过程中使用临时表时,无法检索存储过程的元数据。
为了简单起见,这里举一个简单的例子。
CREATE PROCEDURE dbo.Test
@Seed INT = 0
AS
BEGIN
CREATE TABLE #MyTemp (
ID INT NOT NULL
);
INSERT INTO #MyTemp (ID)
VALUES
(@Seed + 1)
, (@Seed + 2)
, (@Seed + 3)
;
SELECT
ID
FROM
#MyTemp
END
Run Code Online (Sandbox Code Playgroud)
执行该 SP 将返回一个结果集,其中有一列 ( ID) 和三条记录。
EXEC dbo.Test
@Seed = 1;
Run Code Online (Sandbox Code Playgroud)
结果是:
ID
-----------
2
3
4
Run Code Online (Sandbox Code Playgroud)
但是,尝试获取元数据将会失败:
EXEC sys.sp_describe_first_result_set @tsql = N'EXEC dbo.Test @Seed = 1;';
Run Code Online (Sandbox Code Playgroud)
结果是:
Msg 11526, Level 16, State 1, …Run Code Online (Sandbox Code Playgroud) floor( 500 * (1.4 / 100) )给了我6,
floor( 500 * 1.4 / 100 )给了我7
任何人都可以帮助我理解PHP算法如何在内部工作.