计算列为PK

时间:2011-05-06 16:50:56

标签: tsql primary-key calculated-columns

我有一个基于另一列的计算列,我想用作PK。我设置这种方式,但在尝试创建外键时,它总是声称我的PK具有不同的数据类型长度。 PK设置如下:(右('000000'+ CONVERT(nvarchar,[CaseNumber],0),(6)))...这不应该意味着它与其他字段设置为相同为nvarchar(50)

我知道我可以删除所有关系并使用casenumber字段,这是一个int(标识)字段,但我宁愿不重新编码所有这些。

1 个答案:

答案 0 :(得分:1)

没有。

该表达式的数据类型为nvarchar(6),因此您需要将表达式强制转换为nvarchar(50),以避免抱怨长度不匹配。

   DECLARE @v SQL_VARIANT =RIGHT('000000'+CONVERT([NVARCHAR](50),123,0),(6))

   SELECT    CAST(SQL_VARIANT_PROPERTY(@v, 'BaseType') AS VARCHAR(30)) AS BaseType,   
             CAST(SQL_VARIANT_PROPERTY(@v, 'MaxLength') AS INT) AS MaxLength 

返回

BaseType                       MaxLength
------------------------------ -----------
nvarchar                       12

这是以字节为单位的大小,但是将12除以2得到unicode字符的数量。