示例:我编写了一个存储过程,例如dbo.GetAllColumns
,它从INFORMATION_SCHEMA.COLUMNS
中选择了所有不同的列名。我将其安装在数据库DevOps
中。
然后,我从另一个数据库DevOps.dbo.GetAllColumns
运行TestProc
。输出是TestProc
中的所有列还是DevOps
中的所有列?
答案 0 :(得分:2)
在您遇到问题的情况下,它将从DevOps
上下文中返回值。
有一种方法可以实现您想要的,但是我不建议这样做。最好只将proc安装到需要它的所有数据库上。
与您期望的行为类似的方法是在master
中创建它,给它添加一个sp_
前缀,然后(⚠️未记录/不支持)将其标记为系统对象。
USE master
GO
CREATE PROC dbo.sp_GetAllColumns
AS
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
GO
EXEC sys.sp_MS_marksystemobject
'dbo.sp_GetAllColumns'
现在,当从任何其他数据库(使用EXEC dbo.sp_GetAllColumns
进行调用时,它将在该上下文中运行。