微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与链接服务器一起使用时,为什么TSQL不能忽略标识符的尾随空格?

如何解决与链接服务器一起使用时,为什么TSQL不能忽略标识符的尾随空格?

我在一个select * from dbo.MyTable这样的数据库表上进行查询,尽管出于某种原因,我不知道该表MyTable 是用标识符中的尾随空格创建的,该查询仍然可以正常工作。

这不应该让我担心here所述,因为sql Server只忽略尾随空格。不幸的是,在某些情况下,我需要使用这样的链接服务器从该表中选择数据:

select * 
from linkedserver.targetdb.dbo.[MyTable   ]

我需要使用引号名(包括空格),否则会出现错误

链接服务器“ linkedserver”的提供者“ sqlNCLI11”指定了无效的架构或目录

不幸的是,查询是动态生成的,并且没有考虑尾随空间,因为对象名称information_schema表的比较很有效(正确地忽略了尾随空间)。

这可能与提供程序sqlNCLI11或链接服务器的配置有关吗?

解决方法

考虑到您所说的,SQL Server很高兴将名为int value = 5; // we'll constructor a new object,value doens't need to be const std::unique_ptr<const int> ptr{nullptr}; ptr = std::make_unique<const int>(value); // construct a new object and pass the ownership to ptr 的表引用为MyTable ,除了使用链接服务器查询时,显而易见的解决方案是修复表的名称。

您可以使用MyTable进行此操作。例如:

sp_rename

附加说明:如果您确实有一些代码将该对象引用为USE Sandbox; GO CREATE TABLE dbo.[YourTable ] (SomeCol int); GO DECLARE @SQL nvarchar(100) = N'SELECT * FROM dbo.YourTable;'; --Just to prove the same statement is run EXEC sys.sp_executesql @SQL; SELECT DATALENGTH([name]) --returns 20,so spaces are tehre FROM sys.tables WHERE [name] LIKE N'MyTabl%'; EXEC sys.sp_rename N'dbo.YourTable ',N'YourTable'; EXEC sys.sp_executesql @SQL; SELECT DATALENGTH([name]) --Returns 14,so spaces are gone. FROM sys.tables WHERE [name] LIKE N'MyTabl%'; GO DROP TABLE dbo.YourTable; ,则即使删除了表的实际名称的尾随空格,它仍然可以工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?