Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server列数据类型和可索引_Sql_Sql Server_Tsql_Sql Server 2012_Sql Server 2016 - Fatal编程技术网

SQL Server列数据类型和可索引

SQL Server列数据类型和可索引,sql,sql-server,tsql,sql-server-2012,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2012,Sql Server 2016,我需要在SQL Server表中存储可变字符串长度,长度可以从0到10000个字符左右变化 我需要使用like运算符%abc或abc%过滤文本 我曾想过使用varchar或nvarchar,但我无法在此数据类型上创建索引 请建议选择列数据类型并使列可索引的设计建议 谢谢SQL Server将为使用索引,如“abc%”。但是,如果通配符是第一个,它将不使用索引 如果您正在搜索完整的单词,那么您应该进行调查。SQL Server将为使用索引,如“abc%”。但是,如果通配符是第一个,它将不使用索引

我需要在SQL Server表中存储可变字符串长度,长度可以从0到10000个字符左右变化

我需要使用like运算符
%abc
abc%
过滤文本

我曾想过使用
varchar
nvarchar
,但我无法在此数据类型上创建索引

请建议选择列数据类型并使列可索引的设计建议


谢谢

SQL Server将为
使用索引,如“abc%”
。但是,如果通配符是第一个,它将不使用索引


如果您正在搜索完整的单词,那么您应该进行调查。

SQL Server将为
使用索引,如“abc%”
。但是,如果通配符是第一个,它将不使用索引

如果您正在搜索完整的单词,那么您应该进行调查

我曾想过使用varchar或nvarchar,但我无法在此数据类型上创建索引

这些是基于文本的信息的适当数据类型

无法创建索引的原因与数据类型本身无关,但在SQL Server中,只有当索引中的列(或列集)的最大理论大小为900字节(或更小)时,才能创建索引

这意味着,
VARCHAR(1000)
(或
VARCHAR(MAX)
不能被索引。这个大小限制是您的问题,而不是数据类型

解决方案:实际上只有一个解决方案:在要索引的列中使用更少的字节。或者,正如Gordon所建议的,检查SQL Server的全文索引功能

我曾想过使用varchar或nvarchar,但我无法在此数据类型上创建索引

这些是基于文本的信息的适当数据类型

无法创建索引的原因与数据类型本身无关,但在SQL Server中,只有当索引中的列(或列集)的最大理论大小为900字节(或更小)时,才能创建索引

这意味着,
VARCHAR(1000)
(或
VARCHAR(MAX)
不能被索引。这个大小限制是您的问题,而不是数据类型


解决方案:实际上只有一个解决方案:在要索引的列中使用更少的字节。或者,按照Gordon的建议,检查SQL Server的全文索引功能。

谢谢Gordan。要求不是搜索完整文本,而是搜索结尾文本“%abc”,是否有类似endswith的函数。@sri。只需使用通配符<代码>像“%abc”。谢谢你,戈丹。要求不是搜索完整文本,而是搜索结尾文本“%abc”,是否有类似endswith的函数。@sri。只需使用通配符<代码>类似于“%abc”。