Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Свързване на схема с изчислена функция на колона

Невъзможно е да добавите индекс към изчислена колона, освен ако не е детерминистична.

"Детерминистичните функции винаги връщат един и същ резултат при всяко извикване с конкретен набор от входни стойности и при едно и също състояние на базата данни. Недетерминистичните функции могат да връщат различни резултати всеки път, когато се извикват с конкретен набор от входни стойности дори ако състоянието на базата данни, до което имат достъп, остава същото."

Пример:

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

Трябва да посочите PERSISTED за неточни типове данни като [real] и [float] , в друг случай можете свободно да създадете индекс на изглед с изчислена колона ([decimal] ще бъде ОК).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime срещу datetime2 в SQL Server:Каква е разликата?

  2. Проверете пространството, използвано от таблица в SQL Server

  3. Подреждане на родителските редове по низходяща дата с дъщерни редове, подредени независимо под всеки

  4. Какво означава XML типът данни на SQL Server в .NET и как да го конвертирам в XmlDocument?

  5. Как мога да променя ограничение за първичен ключ, използвайки синтаксис на SQL?