計算された列をSQL Serverテーブルに追加しようとすると、DATE型の列を直接VARCHARにキャストすることが非決定的であると判断されました。しかし、もし私が日付の個々の部分を取り出して個別にキャストすると、すべてが問題ありません。 DATEからVARCHARへの直接キャストが非決定論的である理由について、合理的な説明をすることはできません。誰か説明がありますか?DATEからVARCHARへのキャストが非決定的なのはなぜですか?
Ex。日付の
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桁の2番目のパラメータを 'convert()'に追加しても、それでもまだ確定していませんか?私はそれがBOLで明確に説明されたと思った。 – ajeh