【发布时间】:2013-08-21 15:48:57
【问题描述】:
有没有办法知道 nvarchar 列的内容是否只包含一些 ASCII 字符(准确地说是 33 到 127)?
【问题讨论】:
标签: sql-server tsql ascii
有没有办法知道 nvarchar 列的内容是否只包含一些 ASCII 字符(准确地说是 33 到 127)?
【问题讨论】:
标签: sql-server tsql ascii
你可以创建一个验证函数
CREATE FUNCTION [dbo].[NVarChar_Validate] (
@@Value [nvarchar](max),
@@Min [int],
@@Max [int]
)
RETURNS [bit]
AS
BEGIN
DECLARE @Index [int] SET @Index = 1
WHILE @Index <= LEN(@@Value) AND UNICODE(SUBSTRING(@@Value, @Index, 1)) BETWEEN @@Min AND @@Max
SET @Index = @Index + 1
RETURN CASE WHEN @Index > LEN(@@Value) THEN 1 ELSE 0 END
END
GO
然后给表添加一个检查约束,例如:
ALTER TABLE
[dbo].[TableToControl]
ADD CONSTRAINT
[CK_NVarChar_Validate]
CHECK (
[dbo].[NVarChar_Validate]([FieldToControl], 33, 127) = 1
)
因此,所有字段都将保证只有从 33 到 127 的字符。
【讨论】: