我设置了tb表的主键(流水号),然后设置主键的公式为[dbo].[f_NextBH]()[一个生成流水号函数],可是我点击保存的时候,老是提示
“tb”表
- 无法创建索引“PK_tb”。  
无法在表 'tb' 中可为空的列上定义 PRIMARY KEY 约束。
无法创建约束。请参阅前面的错误消息。这是什么意思?应该怎么办?

解决方案 »

  1.   

    可能是[dbo].[f_NextBH]()[一个生成流水号函数]这里错了
      

  2.   


    ALTER FUNCTION [dbo].[f_NextBH]()
    RETURNS char(12)
    AS
    BEGIN
    DECLARE @dt CHAR(6)
    SELECT @dt= CONVERT(CHAR(6), GETDATE(), 12)
    RETURN(
    SELECT @dt+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
     流水函数是这样的
      

  3.   

    第一、你列BH存的日期是什么样的格式,是不是与 CONVERT(CHAR(8), GETDATE(), 12)所得的日期格式一样(yymmdd)
    第二、你 WHERE BH like @dt+'%' 条件确定一定能查出数据来,如果没有适合的条件数据的话,你前边的SELECT 查出来的就是空值了,PK 是不可以为空的,所以你最好在SELECT时加个判断是否空如何来处理、、、