2013-10-15 76 views
0

我想更新一個列(MS SQL表中),其中包含很長的字符串(文本數據類型)附加它與從我的應用程序使用JPQL字符串。但是,下面的查詢會失敗:如何在MSQL中連接兩個字符串與MS SQL

UPDATE entity e SET e.longText = CONCAT(e.longText, :textToAppend) WHERE e.id = :id 

有消息

The data types text and nvarchar are incompatible in the add operator. 

的問題是,我們還需要支持其他DBS比MS SQL數據庫和DBS特定查詢是沒問題的(至少在有另一種方式)。

有了這個查詢,我試圖繞過查詢整個長文本,並在應用中連接它並更新它,所以它不是很慢(查詢經常被調用)。

我可以以某種方式將字符串附加到非常長的文本列,而無需在應用程序中手動執行,因此它適用於MS SQL? (我知道在JPQL中沒有投射支持,很遺憾)

使用JPA和Hibernate。

+0

你爲什麼使用'TEXT'?你知道這個數據類型在10年前就被棄用了嗎? –

+0

@ aaron-bertrand我知道,但它是JPA映射到\ @Lob字符串屬性(並且它必須與其他DBMS兼容,因此我無法指定DBS特定的數據類型) – redhead

+0

我不是說改變你的代碼中的任何東西,我說你從SQL Server獲取錯誤信息,因爲* it *知道它不能將你的字符串附加到TEXT列。但是,如果SQL Server的基礎數據類型是(N)VARCHAR(MAX),則操作應該成功,並且這不會改變任何有關如何在其他任何DBMS中處理此操作的任何內容。 –

回答

0

原來我使用的是舊的hibernate方言。 SQL Server 2008有一種方言(org.hibernate.dialect.SQLServer2008Dialect),它正確映射@Lob String屬性。