sql >> Databáze >  >> RDS >> Sqlserver

Vazba schématu s funkcí vypočítaného sloupce

Je nemožné přidat index na vypočítaný sloupec, pokud není deterministický.

"Deterministické funkce vždy vrátí stejný výsledek, kdykoli jsou volány se specifickou sadou vstupních hodnot a mají-li stejný stav databáze. Nedeterministické funkce mohou vracet jiné výsledky pokaždé, když jsou volány s konkrétní sadou vstupních hodnot i když databáze uvádí, že jejich přístup zůstává stejný."

Příklad:

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

Musíte zadat PERSISTED pro nepřesné datové typy jako [real] a [float] , v opačném případě můžete libovolně vytvořit index na pohledu s vypočítaným sloupcem ([desítkové] bude OK).




  1. Jak vygenerovat 52 týdnů od aktuálního data pomocí Postgresql

  2. PostgreSQL vs. MySQL

  3. Časová období dotazu MySQL a hodnota maximálního poklesu oproti předchozí maximální hodnotě

  4. Jak získat šest týdnů neděle pomocí Weekno v SQL Server 2008?