2016-07-29 43 views
2

我們有一個非常大的包含html的nvarchar(max)字段。在這個html內是一個img標籤。字符串或二進制數據將被截斷 - 大字符串

實施例:

<img style="float:right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/7gAOQW.... 

此列的長度爲1645151,但什麼被替換比這少一點,但不是很多。

我們正在嘗試做的,是在SQL中替換列:

declare @url varchar(50) = 'myimageurl'; 
UPDATE table SET field = 
CAST(REPLACE(CAST(field as NVARCHAR(MAX)),@source,'@url') AS NVARCHAR(MAX)) 

其中@source,是上面的圖像字節字符串,它之前被分配到一個nvarchar(最大)變量運行替換。 dest是圖像的url,而不是圖像字符串。

雖然我仍然得到消息字符串或二進制數據將被截斷。

有誰知道這是否可能在SQL中取代這樣大的字符串。

+0

只是想到這個問題,我傾向於用圖像url替換整個字段的值來代替二進制數據,而不是嘗試進行字符串替換。我認爲這會更清晰,更易於閱讀。而且更可靠。 –

+0

如果「field」的長度是1645151,外部「CAST」是否需要將其轉換爲nvarchar(1645151)? REPLACE函數應該已經返回nvarchar(max)。 – ADyson

+0

@ADyson nvarchar的最大尺寸是8000 –

回答

0

而不是做替換,你可以通過解析出其餘的img標籤來重建整個字段嗎?

喜歡的東西:

declare @Field nvarchar(max) = '<img style="float:right" src="data:image/png;base64,/9j/4AAQSkZJRgA....BAQEBLAEsAAD/7gAOQW" />' 
declare @Source nvarchar(max) = 'data:image/png;base64,/9j/4AAQSkZJRgA....BAQEBLAEsAAD/7gAOQW' 
declare @URL nvarchar(max) = 'www.img.img/img.png' 
declare @Chars int = 20 

select left(@Field,patindex('%' + left(@Source,@Chars) + '%', @Field) - 1) as HTMLStart 
     ,@URL as ImgURL 
     ,right(@Field,len(@Field) - patindex('%' + right(@Source,@Chars) + '%', @Field) - @Chars + 1) as HTMLEnd 

如果你想在整個數據集在一次運行這個,你只需要認準src="data:image/png;base64,元素,並從那裏使用類似的方法,以上述向後工作。取決於您如何識別要替換的二進制數據以及要替換的內容。

1

我有同樣的錯誤,但在不同的功能。

錯誤在於我的模式比我的表達更長,這意味着您的搜索模式將被截斷。

我希望這可以幫助別人。

此外,請確保您將模式和表達式放在您的函數的正確位置。

+0

例如,如果您鍵入'CHARINDEX(haystack,needle)'而不是正確的方式。我試圖在13個字符中搜索一個50,000字符的字符串,因爲我從具有其他順序參數的Postgres'strpos'中複製。 – Noumenon

相關問題