【发布时间】:2020-03-03 20:38:11
【问题描述】:
我使用 SQL Server 2017。我已将服务器\数据库链接到另一个我的主数据库。所以,如果我执行下面的查询,它会起作用并为我带来正确的数据:
use [myMainServer].[myMainDatabase] GO
...
Select * from [myOtherServer].[myOtherDatabase].dbo.[myTable]
我想做的是从链接数据库中获取存储过程的实际脚本。假设我有存储过程:sp_GetNumbers,那么如果我在链接服务器本身执行下面的代码,我就可以收到它的内容:
SELECT OBJECT_DEFINITION(OBJECT_ID('sp_GetNumbers'))
但是我无法从我的主数据库中做到这一点。我在下面尝试过,但不起作用。
SELECT OBJECT_DEFINITION(OBJECT_ID('[myOtherServer].[myOtherDatabase].sp_GetNumbers'))
我的问题是:如何通过在 SQL 服务器 A ([myMainServer].[myMainDatabase]) 中运行查询来获取 SQL 服务器 B ([myOtherServer].[myOtherDatabase]) 中的存储过程的脚本?
【问题讨论】:
-
查看this线程的第二个答案。显然,使用 OBJECT_DEFINITION 会导致在当前数据库的对象定义中进行搜索。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
@marc_s 感谢您的警告,我将相应地重命名我的 sp。
标签: sql sql-server sql-server-2017