2011-07-28 34 views
7

小背景:SQL Server錯誤 「無效試圖在列GetBytes會」

最近我升級 「SQL Server Management Studio中2005年」 從MS鏈接 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7218

使應用補丁,我可以訪問最近構建的SQL Server 2008版本的數據庫服務器。

我在連接到Oracle數據庫的2008 Db服務器上創建了一個服務器鏈接。早些時候,我沒有遇到任何問題,但應用的管理工作室補丁之後,每當我使用運行在服務器鏈接查詢如下

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

OR

select * from [server]..DBNAME.TABLENAME 

我得到的錯誤

執行批次時發生錯誤。錯誤消息是:無效 嘗試對列colname'GetBytes'。該GetBytes會 功能只能在類型文本,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運行問題查詢它運行良好。

謝謝。

+1

如果你認爲這是管理工作室,嘗試運行通過SQLCMD上面的查詢。 http://msdn.microsoft.com/en-us/library/ms162773.aspx sqlcmd -S服務器名-d主 - Q「選擇*從[服務器] .. DBNAME.TABLENAME」 – billinkc

+0

@billinkc,是啊,我已經嘗試過這就是爲什麼提到這個問題與SSMS有關。 – Rahul

+0

似乎合乎邏輯的答案是停止使用SELECT *? –

回答

12

當SQL 2005管理工作室使用SQL 2008服務器並查詢其中的DATE datetype表時,我遇到了該錯誤。

本質上,這意味着SSMS不理解其中一個列數據類型。你說SELECT *不起作用,但是選擇col1,col2,col3。表中有多少列?嘗試按列逐列展開選擇列,直到找到令Management Studio混淆的列。然後,您可以在select子句中使用CAST將其轉化爲Management Studio明白的內容。

這裏可能發生的情況是其中一列從SQL 2008作爲DATE,TIME,DATETIME2或其他新SQL 2008數據類型之一返回。雖然Management Studio 2005可以連接到SQL 2008服務器,但它不理解新的數據類型,並且無法顯示它們。

這是Management Studio的限制。

+0

我不會downvote,但這不是問題...如果我使用'sqlcmd'運行相同的查詢我沒有得到任何錯誤。如果它已經是你說的話,那麼我會有使用sqlcmd的錯誤,對吧? – Rahul

+2

不是。這是一個管理工作室問題。任何形式的查詢都不是一般的(如SQLCMD)。這就是Management Studio專門不知道如何顯示列。 – GilaMonster

0

@GilaMonster表示,這是問題的原因。

同樣,問題是SSMS ANDNOT一般情況下,像如果我運行使用sqlcmd查詢像

sqlcmd -S <servername> -U login -P password -d dbname -Q "select top 10 * from [server]..DBNAME.TABLENAME" 

運行良好沒有錯誤。

解決方案:

反安裝SSMS 2005並安裝SQL Server 2008 R2 Management Studio這將解決該問題。

0

我找到了解決方案。請嘗試查詢包含日期字段以這種方式(假設場3是日期字段)的SQL2008表:

select field1, field2, convert(datetime,field3) from tablename