2014-08-29 107 views
1

有沒有使用DATALENGTH截斷nvarchar的方法?我試圖在列上創建索引,但索引只接受最多900個字節。我有包含1000個字節以上的行。我想截斷這些行,只接受前n個字符< = 900個字節。SQL Server - 使用DATALENGTH截斷

+1

這可能是在設計上的缺陷的症狀。你爲什麼要索引一個寬列?圖書館不會擱置「Farenheit 451」旁邊的「貝爾罐子」,即使一個開始「這是一個p ...」,另一個開始「這是一個q ...」 – Anon 2014-08-29 16:07:46

+0

我第二。爲什麼你需要索引一個很大的列? – Paparazzi 2014-08-29 16:15:23

+0

我們需要在該列上進行搜索。我們適應部分搜索,所以我們可以修剪角色。如果我們不索引該列,那麼查詢一行將需要很長時間。 – janinaj 2014-08-29 16:21:00

回答

0

可以這個sql有用,只需更新該列的表。

Update Table 
Set Column = Left(Ltrim(Column),900) 
+0

不幸的是,這不起作用。 DATALENGTH不同於字符長度(LEN)。列中的某些行具有特殊字符,因此它們佔用更多字節。 – janinaj 2014-08-29 15:54:04

+0

其實,這確實有效,但它應該是450,而不是900.謝謝。 – janinaj 2014-08-29 16:38:20

+1

你知道你會通過更新表格來丟失數據,對吧? – wdosanjos 2014-08-29 16:44:06

0

修剪柱,左側或右側,以900個字符,該列

創建索引
ALTER TABLE usertable ADD used_column AS LEFT(nvarcharcolumn,900); 

創建這個索引中使用columm.it將工作

+0

我已將行整理爲450個字符,但仍佔用了1000多個字節。 – janinaj 2014-08-29 16:22:23

+0

使用nvarchar列創建一個分隔列,那個新列應該有900個字符以下。在新列上建立一個索引,使用該列 – Adi 2014-08-29 16:24:28

+0

對不起,這個工作,但值應該是450,而不是900。 – janinaj 2014-08-29 16:39:03