T-SQL:验证nvarchar ASCII字符

时间:2013-08-21 15:48:57

标签: sql-server tsql ascii

有没有办法知道nvarchar列的内容是否只包含一些ASCII字符(完全是33到127)?

1 个答案:

答案 0 :(得分:1)

您可以创建验证功能

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个字符。