Sql server 2008 SQL Server错误";获取列“上的字节”的尝试无效;

Sql server 2008 SQL Server错误";获取列“上的字节”的尝试无效;,sql-server-2008,ssms,Sql Server 2008,Ssms,小背景: 最近我升级了“SQLServerManagementStudio 2005”,使用了来自MS link的补丁 因此,我可以访问SQL server 2008版本中最近构建的DB服务器 我在2008 Db服务器上创建了一个服务器链接,该服务器连接到Oracle Db。早些时候,我没有遇到任何问题,但在使用下面的服务器链接运行查询时应用了ManagementStudio补丁之后 select top 10 * from [server]..DBNAME.TABLENAME 或 我得到

小背景:

最近我升级了“SQLServerManagementStudio 2005”,使用了来自MS link的补丁

因此,我可以访问SQL server 2008版本中最近构建的DB服务器

我在2008 Db服务器上创建了一个服务器链接,该服务器连接到Oracle Db。早些时候,我没有遇到任何问题,但在使用下面的服务器链接运行查询时应用了ManagementStudio补丁之后

select top 10 * from [server]..DBNAME.TABLENAME 

我得到了错误

执行批处理时出错。错误消息为:无效 尝试获取colname'列上的字节数。GetBytes 函数只能用于Text、NText或Image类型的列。“

但是如果我把查询改为

select top 10 col1,col2 from [server]..DBNAME.TABLENAME 

它运行良好,没有任何问题

我不确定,但我认为这与
managementstudio
有关,
managementstudio
中的某些设置可能导致此问题

是否有人有任何想法或曾经面对过这个问题。请你帮忙

编辑:如果我使用
sqlcmd
运行问题查询,它运行良好


谢谢。

我以前在将SQL 2005 management studio用于SQL 2008服务器并查询包含日期类型的表时遇到过此错误

从本质上说,这意味着SSMS不理解返回到它的一种列数据类型。您说SELECT*不起作用,但SELECT col1、col2、col3起作用。表中有多少列?请尝试逐列展开SELECT,直到找到令Management Studio困惑的列。然后可以在SELECT子句中使用CAST来打开这是管理工作室所理解的

这里可能发生的情况是,其中一列从SQL 2008返回为DATE、TIME、DATETIME2或其他新的SQL 2008数据类型。尽管Management Studio 2005可以连接到SQL 2008服务器,但它不了解新的数据类型,无法显示它们


这是Management Studio的一个局限性。

正如@GilaMonster所说,这就是问题的原因

同样,问题出在SSMS上,而不是general,比如我使用
sqlcmd
like运行查询

sqlcmd -S <servername> -U login -P password -d dbname -Q "select top 10 * from [server]..DBNAME.TABLENAME" 
sqlcmd-S-U login-P password-d dbname-Q“从[server]…dbname.TABLENAME中选择前10个*
它运行良好,没有错误

解决方案:


Unistall
SSMS 2005
并安装将解决此问题的SQL Server 2008 R2 Management Studio。

我找到了解决方案。请尝试以这种方式查询包含日期字段的sql2008表(假设字段3是日期字段):


如果您认为它是ManagementStudio,请尝试通过SQLCMD.SQLCMD-S servername-d master-Q“select*from[server]…DBNAME.TABLENAME运行上述查询“@billinkc,是的,我已经试过了,这就是为什么提到SSM的问题。似乎合乎逻辑的答案是停止使用SELECT*?我不会投反对票,但这不是问题所在。。。如果使用
sqlcmd
运行相同的查询,则不会出现错误。如果这是你说的话,那么我也会在使用sqlcmd时出错。。。是吗?不是。这是管理工作室的问题。它不适用于任何形式的查询(如SQLCMD)。这是因为ManagementStudio不知道如何显示列。
select distinct col1, col2, col3 from [server]..DBNAME.TABLENAME 
sqlcmd -S <servername> -U login -P password -d dbname -Q "select top 10 * from [server]..DBNAME.TABLENAME" 
select field1, field2, convert(datetime,field3) from tablename