Sql server SQL Server存储过程是在安装它们的数据库上运行,还是在运行它们的数据库上运行?

Sql server SQL Server存储过程是在安装它们的数据库上运行,还是在运行它们的数据库上运行?,sql-server,tsql,Sql Server,Tsql,示例:我编写了一个存储过程,比如说dbo.GetAllColumns,它从信息\u SCHEMA.COLUMNS中选择所有不同的列名。我将它安装在数据库DevOps中 然后我从另一个数据库运行DevOps.dbo.GetAllColumns,TestProc。输出是TestProc中的所有列还是DevOps中的所有列?在您的问题中,它将从DevOps上下文返回值 有一种方法可以实现你想要的,但我不推荐。最好只将proc安装到所有需要它的数据库上 与您想要的行为类似的方法是在master中创建它,

示例:我编写了一个存储过程,比如说
dbo.GetAllColumns
,它从
信息\u SCHEMA.COLUMNS
中选择所有不同的列名。我将它安装在数据库
DevOps


然后我从另一个数据库运行
DevOps.dbo.GetAllColumns
TestProc
。输出是
TestProc
中的所有列还是
DevOps
中的所有列?

在您的问题中,它将从
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
)时,它将在该上下文中运行。

在您的问题中,它将从
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\u GetAllColumns
)时,它将在该上下文中运行。

为什么不测试它,看看会发生什么?这可能比在这里发布问题并等待答复所需的时间要短。DevOps,但我同意@Igor。此外,如果过程如此简单,您不需要它。您只需使用您列出的完全限定的服务器名称编写查询(假设它是链接服务器),我希望它不会这样做,也不迫切需要答案,但我还是照做了。它在数据库上运行,您可以安装它为什么不测试它,看看会发生什么?这可能比在这里发布问题并等待答复所需的时间要短。DevOps,但我同意@Igor。此外,如果过程如此简单,您不需要它。您只需使用您列出的完全限定的服务器名称编写查询(假设它是链接服务器),我希望它不会这样做,也不迫切需要答案,但我还是照做了。它在安装它的数据库上运行