我有一个由第三方工具调用的存储过程。我相信它使用的是 ODBC,但它本质上是一个黑匣子。DBMS 是 SQL Server 2012。
当存储过程是一个简单的选择时,第三方工具接收结果集,但是当它首先访问一个临时表时,它不会。例如,以下两个存储过程从 SSMS 返回相同的结果,但只能从工具中成功调用第一个。
我不明白的是,从外部角度来看,这两个功能有何不同。它们都采用相同的参数,最后一个查询产生相同的结果。
存储过程在哪里执行?
--This one works when called both ways
CREATE PROC [dbo].[sp_GetUsers]
AS
Select Top 1000 userId
from Users
--This only works from SSMS.
CREATE PROC [dbo].[sp_ComplicatedGetUsers]
AS
If OBJECT_ID('tempdb..#TMPUsers') IS NOT NULL
BEGIN
DROP TABLE #TMPUsers
END
Select Top 1000 userId
INTO #TMPUsers
from Users
Select * from #TMPUsers
Run Code Online (Sandbox Code Playgroud)