在我的数据库中,我有一些计算列来帮助确保引用完整性约束。我使用计算列而不是默认值列,因为我使用的 LINQ2SQL 不理解数据库中的默认值。
我的尝试是使用
CAST('C' as CHAR(1))
它会自动转换为
(CONVERT([char](1),'C',0))
通过 SSMS。但是,这会导致 NULL-able CHAR(1) 列类型。
如果我只使用'C'
或ISNULL(NULL,'C')
(这会导致非 NULL 类型),则该列将被选为 VARCHAR(?)。而且,如果我将两者结合起来使用ISNULL(NULL,CONVERT([char](1),'C',0))
,我又回到了一个 NULL-able CHAR(1)。
我想要这个有两个原因:
计算列将参与与外部 CHAR(1) 列的关系。
非 NULL CHAR(1) 直接映射到 LINQ2SQL 中的 .NET 字符类型。
更新:
它适用于我ISNULL(CONVERT([char](1),'C',0),0)
,但我不确定“为什么”。如果有的话,似乎ISNULL(..,0)
会进一步统一类型。
我会很高兴得到一个很好的解释。