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