2010-08-06 103 views
0

我有一個表在該數據庫中查詢鏈接的SQL Server 2008數據庫,並加入到數據表中的SQL Server 2000這是工作的查找,直到其中一列的查詢在SQL Server 2008數據庫中更改爲varchar(max)。我收到一個錯誤,我通過使用CAST(varchar(max)column AS varchar(50))修復了它。現在我的查詢性能比變化前的情況要慢。你能給我一些關於如何解決這個問題的建議嗎?感謝您的時間。VARCHAR(最大值),2008年爲varchar在2000

+0

如何LEFT(VARCHARMAXCOLUMN,50)比作CAST - 或者根本不是工作? – 2010-08-06 23:26:06

+3

爲什麼將它定義爲'Varchar(max)',如果它可以成功轉換爲'varchar(50)'? (即將數據類型更改回它是如何選項的?) – 2010-08-06 23:35:30

+0

您收到的錯誤是什麼? – 2010-10-12 16:49:24

回答

3

正如其他評論者所指出的那樣,爲什麼列改爲VARCHAR(最大值),如果它能夠可靠地轉換爲VARCHAR(50)?

VARCHAR(最大值)的目的是爲文本數據類型的替代品,不應該僅僅被隨便使用。一個普通的VARCHAR可以支持多達8000個字符,並通過SQL 2000和2005年

如果你正在做這個轉換()在選擇列表中的認可,作爲連接條件,或在where子句中?分佈式查詢已經執行緩慢,並且通過在where子句中添加函數(cast,left等)或加入條件只會使其變得更糟。

假設你不能將varchar(最大值)更改爲普通的VARCHAR,這裏是一個想法

是否2005箱有一個鏈接服務器連接到SQL 2000箱?如果是這樣,你可以這樣運行查詢嗎? 2005框將能夠直接比較varchar(max)和varchar(50)。

+0

奧斯卡,發佈一些額外的細節,我們會盡力幫助你。 – 2010-08-07 13:58:27

+0

供應商是數據庫的所有者(SQL Sever 2008)。他們必須將其更改爲「Max」以容納長期診斷文本,在某些情況下該文本將超過8000個限制。我對數據庫有選擇權限來爲報告提取數據,但我無權創建鏈接服務器。我會問他們是否願意爲我連接我們的服務器SQL 2000。 會 - 我想你的建議,但它返回一個錯誤「參數的數據類型的文本是左函數的參數1無效的。」感謝您的建議。 – Oscar 2010-08-09 15:40:04