sql >> Database teknologi >  >> RDS >> Sqlserver

Skemabinding med beregnet kolonnefunktion

Det er umuligt at tilføje indeks på en beregnet kolonne, medmindre det er deterministisk.

"Deterministiske funktioner returnerer altid det samme resultat, hver gang de kaldes med et bestemt sæt inputværdier og givet den samme tilstand af databasen. Ikke-deterministiske funktioner kan returnere forskellige resultater, hver gang de kaldes med et specifikt sæt inputværdier selvom databasen angiver, at de har adgang, forbliver den samme."

Eksempel:

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

Du skal angive PERSISTED for upræcise datatyper som [real] og [float] , i andre tilfælde kan du frit oprette et indeks på en visning med beregnet kolonne ([decimal] vil være OK).




  1. MySQL eller PHP Omdan rækker til kolonner

  2. Opdater formular ved hjælp af Ajax, PHP, MYSQL

  3. Få dagsnavnet fra en dato i PostgreSQL

  4. Sådan fjerner du en database-mailkonto fra en profil i SQL Server (T-SQL)