SQL Server错误“在列上无效尝试GetBytes”

时间:2011-07-28 13:53:57

标签: sql-server-2008 ssms

小背景:

最近我通过应用来自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运行问题查询,它运行正常。

感谢。

3 个答案:

答案 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