我有一个基于另一列的计算列,我想用作PK。我设置这种方式,但在尝试创建外键时,它总是声称我的PK具有不同的数据类型长度。 PK设置如下:(右('000000'+ CONVERT(nvarchar,[CaseNumber],0),(6)))...这不应该意味着它与其他字段设置为相同为nvarchar(50)
我知道我可以删除所有关系并使用casenumber字段,这是一个int(标识)字段,但我宁愿不重新编码所有这些。
答案 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字符的数量。