我有两个名为 DATA01 和 DATA02 的 SQL Server(运行 SQL Server 2008)。 DATA02 有一个链接服务器定义 LINK,它指向 DATA01,并设置了合适的用户映射。在 DATA01 上有一个数据库 MyDatabase 包含以下两个表:
CREATE TABLE T_A (
Id int
)
CREATE TABLE T_B (
Id int,
Stuff xml
)
当我从 DATA02 运行此命令时,我得到了预期返回的数据:
SELECT Id FROM LINK.MyDatabase.dbo.T_A;
但是,当我从 DATA02 运行此命令时,出现错误:
SELECT Id, Stuff FROM LINK.MyDatabase.dbo.T_B;
错误是
Xml data type is not supported in distributed queries. Remote object 'DATA02.MyDatabase.dbo.T_B' has xml column(s).
奇怪的是,这个命令:
SELECT Id FROM LINK.MyDatabase.dbo.T_B;
也出现同样的错误,即使我没有SELECTxml 列!这是怎么回事?
最佳答案
这是 SQL Server 中的缺陷。仅仅 存在 表中的 xml 列会阻止它参与分布式查询(例如,通过链接服务器连接进行查询)。这is mentioned in this 'retired' documentation .当前版本的文档中似乎没有提及这一点。
Microsoft Connect 上曾经有相关的错误报告,但现在已“停用”,取而代之的是 Azure 反馈论坛。 This feedback item关闭并指示“请直接从产品文档提交反馈”,如果产品文档确实提到了这一点,那将很好。 This other feedback item包括从 Connect 迁移的评论,状态为“未计划”。
曾经存在的一个 Connect 错误报告提供了两个解决方法:
Create [a] view without the XML column(s) on remote server and query that.
在您的示例中,这将涉及向 MyDatabase 添加一个 View
看起来像这样:
CREATE VIEW V_T_B AS SELECT Id FROM T_B;
然后您可以通过链接查询此 View 以获取 Id
数据。请注意,类似
SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
不工作。
Use a pass-through query in the form
SELECT * from OPENQUERY (... )
这种方法的优点是不需要对 源数据库;缺点是它不再可能 对本地数据和链接数据使用标准的四部分命名。这 查询看起来像
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
请注意,如果您确实确实想要 xml 数据,则此方法(以及 转换为非 xml 数据类型)将需要:
SELECT Id, CAST(Stuff AS XML) Stuff
FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff
FROM T_B') T_B;
请注意,该错误首先在 SQL Server 2005 中报告,在 SQL Server 2017 中仍未修复。我还无法检查 SQL Server 2019。
关于sql-server - 为什么在为非 xml 数据查询链接服务器时出现错误 "Xml data type is not supported in distributed queries"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442039/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%