【问题标题】:column with specified length value具有指定长度值的列
【发布时间】:2015-12-15 15:35:40
【问题描述】:

我想使用 SQL Server 创建一个列,该列将接受精确为 6 位的值。不接受具有更多或更少位数的值。

【问题讨论】:

    标签: sql-server constraints


    【解决方案1】:

    您可以使用简单的CHECK 约束并检查列长度。这已经被告知,但没有发布解决方案,所以我在这里:

    CREATE TABLE dbo.Test
    (
        YourSixDigitColumn INT
        , CONSTRAINT CK_CheckLength CHECK (LEN(YourSixDigitColumn) = 6)
    );
    

    如果我尝试插入其中之一:

    INSERT INTO dbo.Test
    VALUES (12345);
    
    INSERT INTO dbo.Test
    VALUES (1234567);
    

    它会给我这个讨厌的错误信息:

    消息 547,级别 16,状态 0,第 7 行 INSERT 语句冲突 使用 CHECK 约束“CK_CheckLength”。冲突发生在 数据库“master”,表“dbo.Test”,列“YourSixDigitColumn”。这 语句已终止。

    而且这条 SQL 语句可以完美运行:

    INSERT INTO dbo.Test
    VALUES (123456);
    

    【讨论】:

      【解决方案2】:

      使用char(6)Decimal(6,0)

      但要强制它不能少于 6 位,您需要使用 check constraint

      【讨论】:

      • 我尝试使用这个ADD CONSTRAINT [MinLengthConstraint] CHECK (DATALENGTH([your_column]) = 11),但没有成功
      • 你为什么用11? 6个字符的字符串的Datalength是6。
      • Tab Alleman - 您不能为此使用 DATALENGTH。它返回存储值所需的字节数。示例:整数 1 和 999999 的 DATALENGTH 均为 4。您可以使用 LEN,但实际上这是用于字符串而不是数字。 msdn.microsoft.com/query/…
      • @destination-data 如果 OP 使用数字数据类型,您是正确的。
      【解决方案3】:

      您可以为此使用 SQL Server 的Check Constraints。这些是限制列中允许值的好方法。

      如果您的六位数始终是整数,您的规则将如下所示:

      ColumnA >= 100000 AND ColumnA <= 999999.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-24
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-10
        • 2017-10-10
        • 1970-01-01
        相关资源
        最近更新 更多