如何使用 4 部分命名约定在“更新统计”作业中调用链接服务器?

Posted

技术标签:

【中文标题】如何使用 4 部分命名约定在“更新统计”作业中调用链接服务器?【英文标题】:How to use a 4 part naming convention to call a linked server within an "updates statistics" job? 【发布时间】:2014-09-26 14:47:43 【问题描述】:

我正在集成服务器上设置作业以在我的客户端数据库上运行统计更新。

问题是更新统计语法不允许我调用 4 部分名称。

我想做这样的事情:

UPDATE STATISTICS [linked server].[database].[dbo].[table] 

WITH FULLSCAN

GO

但我收到一条错误消息,指出已超出最大前缀数。

有谁知道如何解决这个问题?我真的没有选择将它本地放在我的客户端数据库中。

找到答案

感谢所有对此表示赞赏的人,但我实际上找到了一个非常酷的解决方法,希望它可以帮助其他人。

EXEC [linked_server].[database].[sys].[sp_executesql] N'UPDATE STATISTICS [dbo].[table] WITH FULLSCAN'

这可用于截断、触发器启用和禁用以及其他不允许跨链接服务器的 SQL 功能。

据我了解,它通过链接服务器而不是执行传递语句。

【问题讨论】:

你不能,UPDATE STATISTICS 有一个限制,只能接受 two.part 对象名称。这意味着您必须在该服务器上和数据库上下文中才能执行此命令。 如何在运行UPDATE STATISTICS 的客户端数据库上创建一个存储过程。然后在您的集成服务器上创建一个执行该存储过程的作业。 我也遇到过这个问题,有没有办法将客户端设置为目标服务器并在不存在于客户端服务器上的情况下传递作业 完整的错误信息是什么? 我会尝试创建一个synonym。喜欢:CREATE SYNONYM my_remote_table FOR [linked server].[database].[dbo].[table] 【参考方案1】:

您可能不想绕过这个限制,因为跨分布式事务这样做似乎不明智;-)。但你很幸运。您已经在使用 SSIS。只需让 SSIS 连接到正确的服务器并通过该直接/本地连接执行UPDATE STATISTICS

此外,由于您使用的是 SSIS,它有一个更新统计数据的任务:

Update Statistics Task (Maintenance Plan) Update Statistics Task

【讨论】:

以上是关于如何使用 4 部分命名约定在“更新统计”作业中调用链接服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Powershell 中使用文件命名约定获取文件

从 XMLNode 中选择是不是算作 SQL Server 中的 3 部分命名约定?

如何验证XML架构中的命名约定

C# 编码约定

如何使用 Jackson 全局定义命名约定

部分类文件的命名约定