2016-08-09 30 views
5

Tworzyłem tabelę w mojej bazie danych SQL Server, gdy zwrócił moją uwagę konkretny atrybut Deterministic kolumn bazy danych. Proszę zobaczyć zrzut ekranu poniżej:Nie deterministyczny typ danych w SQL Server

enter image description here

jestem już świadomy funkcji deterministyczne i niedeterministyczne SQL Server, ale chcę wiedzieć, że ma to zastosowanie nawet do danych typów danych w SQL Server w jakikolwiek sposób?

Powodem, dla którego pytam, jest to, że dosłownie skanowałem wszystkie typy danych dostępne w serwerach SQI v2008 i v2012, ale wartość pola Deterministic dla wszystkich z nich zawierała Yes. Nie pokazano No dla żadnego pojedynczego typu danych.

Moje pytanie brzmi, czy jest to właściwy atrybut dowolnego typu danych w SQL Server, który nadal wpływa na sposób przechowywania wartości w kolumnie lub jest tylko dziedzictwem z przeszłości, może pochodzić z SQL Server 2000 lub SQL Server 2005, gdzie kiedyś istniały pewne typy danych, które nie miały charakteru deterministycznego. Każda informacja będzie bardzo przydatna do zrozumienia tej cechy typów danych w SQL Server. Czy mamy obecnie na serwerze SQL dowolny typ danych, który ma charakter niedeterministyczny?

Ponieważ nie widziałem No dla każdego z typów danych, które dostałem więcej, wprawiło w zakłopotanie. Dużo też googlowałem, ale każde przeszukanie prowadzi mnie do funkcji deterministycznego i nie-deterministycznego SQL Server, jak ta poniżej i nikt nie mówi o charakterystyce związanej z typami danych SQL Server.

https://technet.microsoft.com/en-us/library/ms178091(v=sql.110).aspx

+0

kolumna obliczana może być niedeterministyczny. – Blorgbeard

+0

https://msdn.microsoft.com/en-AU/library/ms188300.aspx dodaj kolumnę obliczeniową dla kolumny a typu int -> kolumna b formuła = a + DATEPART (dd, GETDATE()) spowoduje Deterministic = No – artm

+1

@Blorgbeard Utworzono kolumnę obliczeniową z tą formułą '([QtyAvailable] * [UnitPrice])'. Wciąż powoduje to 'Deterministic' =' Yes'. QtyAvailable i UnitPrice są dwiema kolumnami w mojej tabeli typu 'smallint' i' money' odpowiednio. – RBT

Odpowiedz

5

Jeśli uważnie przeczytać tę dokumentację MSDN znajdziesz:

IsDeterministic - Kolumna jest deterministyczny. Ta właściwość ma zastosowanie tylko do kolumn obliczeniowych i kolumn widoku z zakresu od .

Ma zastosowanie do kolumn (obliczonych, wyświetlanych) uzyskanych z innych kolumn z zaangażowanymi niedeterministycznymi funkcjami.

Przykłady:

CREATE TABLE Deterministic 
(
    ID int, 
    Calculated AS SYSDATETIME() 
) 

SELECT COLUMNPROPERTY(OBJECT_ID('Deterministic'), 'Calculated', 'IsDeterministic') IsDeterministic 
--Returns 0 

Jeśli tworzysz pogląd w tej tabeli w następujący sposób i wykonać następujące zapytanie

CREATE VIEW vDeterministic AS 
SELECT ID, Calculated, DATEADD(D, 1, Calculated) Tomorrow 
FROM Deterministic 
GO 
SELECT 'Calculated' ColumnName, 
    COLUMNPROPERTY(OBJECT_ID('vDeterministic'), 'Calculated', 'IsDeterministic') IsDeterministic 
UNION ALL 
SELECT 'Tomorrow', 
    COLUMNPROPERTY(OBJECT_ID('vDeterministic'), 'Tomorrow', 'IsDeterministic') 

się również pojawić non deterministyczne kolumny

ColumnName IsDeterministic 
---------- --------------- 
Calculated 0 
Tomorrow  0