我有一个查询链接SQL Server 2008数据库的查询,并将数据从该数据库中的表连接到SQL Server 2000中的表。它一直工作,直到SQL Server 2008数据库中的一列更改为VARCHAR(最大值)。我收到一个错误,我使用CAST(varchar(max)列AS varchar(50))修复它。现在,与更改之前的情况相比,我的查询性能很慢。你能否就如何解决这个问题给我一些建议。谢谢你的时间。
答案 0 :(得分:3)
正如其他评论者指出的那样,如果可以将列可靠地转换为varchar(50),为什么该列更改为varchar(max)?
Varchar(max)意味着替换text数据类型,不应随便使用。普通varchar最多可支持8000个字符,并且可被SQL 2000和2005识别。
如果您在选择列表中执行此cast(),作为连接条件,或在where子句中执行此操作?分布式查询已经执行得很慢,并且通过在where子句中添加函数(强制转换,左转等)或连接条件只会使其变得更糟。
假设您无法将varchar(max)更改为普通varchar,这是一个想法
2005年的盒子是否有与SQL 2000盒子的链接服务器连接?如果是这样,你可以这样运行查询。 2005框将能够直接比较varchar(max)和varchar(50)。