2015-07-06 30 views
5

Mam jedną kolumnę trwającą opartą na polu XML, a SQL Server zawsze używa "Oblicz skalarnego", gdy zapytanie kwerendy tej tabela. Czemu? czy to nie trwa?Dlaczego program SQL Server "Oblicz skalarnię" po wybraniu kolumny utrwalonej?

Podejrzewam, że nie robię żadnych warunków, które uniemożliwiałyby trwałe utrzymanie kolumny. To jest mój stół (a funtion trzeba stworzyć utrzymywało kolumna):

create FUNCTION [dbo].[FuncTestPersisted] (@xml XML) 
RETURNS int 
WITH SCHEMABINDING 
AS 
BEGIN 
RETURN @xml.value('(/node/@value)[1]','int') 
END 


create TABLE test_TB(
    [ID] [int] NOT NULL, 
    [CustomProps] [xml] NULL, 
    [TestPersisted] AS ([dbo].[FuncTestPersisted]([CustomProps])) PERSISTED, 
CONSTRAINT [PK_test_TB] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

będę naprawdę wdzięczny za każdą sugestię, unikając „Oblicz skalarne” połączenia. Proszę, bez użycia wyzwalaczy (jednym wyzwalaczem dla każdej obliczonej kolumny jest ....... za dużo pracy;))

Próbowałem również z tą tabelą, a plan wykonywania kwerend wciąż wyświetla "Skalę obliczeniową" połączenia. CZEMU?

create TABLE [dbo].[test_TB](
    [ID] [int] NOT NULL, 
    [CustomProps] [xml] NULL, 
    [TestPersisted] AS (5*ID) PERSISTED, 
CONSTRAINT [PK_test_TB] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 
+1

[Ta odpowiedź] (http://stackoverflow.com/a/5999986/1048425) powinna pomóc. – GarethD

+0

Widziałem to. Dzięki. ale rozwiązaniem jest: nie ma rozwiązania, a nie przyczyny ... :( – Tirma

+0

@ Tirma link w odpowiedzi na forum wsparcia MS sugeruje, że w niektórych przypadkach możliwe jest przepisanie zapytania tak, aby wartość nie została obliczona ponownie. Może spróbuj tego? –

Odpowiedz

0

GarethD jest poprawny. Utrwalone kolumny w SQL są frustrujące. Dodajesz je, myśląc, że poprawią wydajność. Jeśli chcesz stale buforować wartość taką jak ID * 5 lub inne obliczenia, po prostu dodaj kolejną kolumnę i oblicz wartość raz i zapisz wynik.