2014-08-29 72 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