使用约束阻止NVarChar列中的非排序字符?

时间:2015-09-28 15:21:55

标签: tsql sql-server-2008-r2

奇怪的要求,但在这里。我们在表格中有一个CustomerId VarChar(25)列。我们需要让它NVarChar(25)来解决类型转换问题。

CHARINDEX vs LIKE search gives very different performance, why?

但是,我们不希望允许非拉丁字符存储在此列中。有没有办法在列上放置这样的约束?我宁愿让数据库处理这个检查。一般来说,对于我们所有的字符串,我们都可以使用NVarChar,但是像ID这样的一些列不适合这样,因为可能会有来自不同语言的相似字符串

示例:

CustomerId NVarChar(1) - PK
  • 价值1:BOPOH
  • 价值2:ВОРОН

那两个不同的字符串(第二个是西里尔字母)

我想阻止此进入方案。我想确保无法将值2保存到字段中。

1 个答案:

答案 0 :(得分:0)

以防它有助于某人。不确定它是否最优雅"解决方案,但我在这些字段上放置了这样的约束:

ALTER TABLE [dbo].[Carrier]  WITH CHECK ADD  CONSTRAINT [CK_Carrier_CarrierId] CHECK  ((CONVERT([varchar](25),[CarrierId],(0))=[CarrierId]))
GO