Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Powiązanie schematu z funkcją obliczanej kolumny

Nie można dodać indeksu do kolumny wyliczanej, chyba że jest to deterministyczne.

"Funkcje deterministyczne zawsze zwracają ten sam wynik za każdym razem, gdy są wywoływane z określonym zestawem wartości wejściowych i mają ten sam stan bazy danych. Funkcje niedeterministyczne mogą zwracaćróżne wyniki za każdym razem, gdy są wywoływane z określonym zestawem wartości wejściowych nawet jeśli baza danych stwierdza, że ​​mają dostęp, pozostaje taka sama."

Przykład:

CREATE FUNCTION dbo.FuncA()
RETURNS [float]
WITH SCHEMABINDING    -- required option
BEGIN
  RETURN 1.0   -- DB engine parses body, and marks this func. as 'deterministic'
END
GO

CREATE TABLE TableA (
  K int primary key clustered,
  A AS dbo.FuncA() PERSISTED    -- must be persisted
)
GO

CREATE VIEW ViewA
WITH SCHEMABINDING    -- required option
AS
  SELECT K, A FROM dbo.TableA
GO

CREATE UNIQUE CLUSTERED INDEX IDX1 ON dbo.ViewA (K, A)
GO

Musisz określić PERSISTED dla nieprecyzyjnych typów danych, takich jak [real] i [float] , w innym przypadku możesz dowolnie utworzyć indeks na widoku z wyliczoną kolumną ([dziesiętny] będzie OK).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RADIANS() Przykłady w SQL Server

  2. Obejście problemu zdalnego wywoływania funkcji z wartościami przechowywanymi w tabeli w SQL Server ma jeszcze więcej problemów

  3. Plusy i minusy TRUNCATE vs DELETE FROM

  4. Zwróć bieżącą nazwę logowania w SQL Server (T-SQL)

  5. Jak zaktualizować pole varbinary o określoną wartość?