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]
[Ta odpowiedź] (http://stackoverflow.com/a/5999986/1048425) powinna pomóc. – GarethD
Widziałem to. Dzięki. ale rozwiązaniem jest: nie ma rozwiązania, a nie przyczyny ... :( – Tirma
@ 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? –