【发布时间】:2016-10-07 16:22:02
【问题描述】:
在尝试将计算列添加到 SQL Server 表时,我发现将具有 DATE 类型的列直接转换为 VARCHAR 被认为是不确定的。但是,如果我取出日期的各个部分并单独投射它们,那么一切都很好。我想不出一个合理的解释来解释为什么直接从 DATE 到 VARCHAR 的转换是不确定的。有人解释一下吗?
例如
create table [dbo].[junk_CCtest]
(
PatientId bigint identity not null,
EmployerId varchar(6) default 'F*Corp',
EffDate date default getdate()
)
go
-- This works fine.
alter table dbo.junk_CCtest
add Checksum1 as (hashbytes('sha2_256', EmployerId + '/' + cast(PatientId as varchar(10)) + cast(year(EffDate) as varchar(4)) + cast(month(EffDate) as varchar(2)) + cast(day(EffDate) as varchar(2)))) persisted;
go
-- This results in: "Computed column 'Checksum3' in table 'junk_CCtest' cannot be persisted because the column is non-deterministic."
alter table dbo.junk_CCtest
add Checksum3 as (hashbytes('sha2_256', EmployerId + '/' + cast(PatientId as varchar(10)) + cast(EffDate as varchar(10)))) persisted;
go
谢谢,
伊恩
【问题讨论】:
-
如果您将 3 位数的第二个参数添加到
convert(),它仍然是不确定的吗?我认为这在 BOL 中有明确的解释。
标签: sql-server tsql