小背景:
最近我通过应用来自MS链接的补丁升级了“SQL server management studio 2005” http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7218
这样,我就可以访问最近构建的SQL Server 2008版本的数据库服务器。
我在2008 Db服务器上创建了一个连接到Oracle DB的服务器链接。早些时候我没有遇到任何问题,但每当我使用服务器链接运行查询时应用管理工作室补丁
select top 10 * from [server]..DBNAME.TABLENAME
OR
select * from [server]..DBNAME.TABLENAME
我收到错误
执行批处理时发生错误。错误消息是:无效 尝试在列colname上获取GetBytes'。 GetBytes 函数只能用于Text,NText或Image类型的列。“
但是如果我将查询更改为
select top 10 col1,col2 from [server]..DBNAME.TABLENAME
OR
select distinct col1, col2, col3 from [server]..DBNAME.TABLENAME
它运行正常,没有任何问题。
我不确定,但我相信它与Management Studio
有关... Management Studio
中的某些设置可能导致此问题。
有没有人知道或者之前遇到过这个问题。你能帮忙吗?
编辑:如果我使用sqlcmd
运行问题查询,它运行正常。
感谢。
答案 0 :(得分:12)
在将SQL 2005管理工作室用于SQL 2008服务器并查询其中包含DATE日期类型的表之前,我遇到了这个错误。
基本上,这意味着SSMS无法理解返回给它的一种列数据类型。您说SELECT *不起作用,但SELECT col1,col2,col3可以。表中有多少列?尝试逐列扩展选择列,直到找到令管理工作室混乱的列。然后,您可以在select子句中使用CAST将其转换为Management Studio可以理解的内容。
这里可能发生的是其中一个列从SQL 2008返回为DATE,TIME,DATETIME2或其他一个新的SQL 2008数据类型。虽然Management Studio 2005可以连接到SQL 2008服务器,但它无法理解新数据类型并且无法显示它们。
这是Management Studio的限制。
答案 1 :(得分:0)
正如@GilaMonster所说,这就是问题的原因。
同样,问题在于SSMS而不是一般问题,就像我使用sqlcmd
运行查询一样
sqlcmd -S <servername> -U login -P password -d dbname -Q "select top 10 * from [server]..DBNAME.TABLENAME"
它没有错误地运行良好。
解决方案:
Unistall SSMS 2005
并安装SQL Server 2008 R2 Management Studio
即可解决此问题。
答案 2 :(得分:0)
我找到了解决方案。请尝试以这种方式查询包含DATE字段的sql2008表(假设field3是DATE字段):
select field1, field2, convert(datetime,field3) from tablename