Korzystanie z zestawów kolumna
Tabel używających rozrzedzone kolumna można określić zestaw kolumn do zwrócenia wszystkich rozrzedzone kolumn w tabela.Zestaw kolumn jest bez typu reprezentacji XML, który łączy rozrzedzone kolumna tabela w strukturze danych wyjściowych.Zestaw kolumn przypomina kolumna obliczeniowa w zestawie kolumn nie są fizycznie przechowywane w tabela.Zestaw kolumn różni się od kolumna obliczeniowa, w tym zestaw kolumn jest bezpośrednio mogą być aktualizowane.
Należy wziąć pod uwagę przy użyciu zestawów kolumna, gdy liczba kolumn w tabela jest duża i działających na nich indywidualnie jest wygodna.Aplikacje mogą być widoczne niektóre wzrost wydajności ich zaznaczenie i wstawienie danych przy użyciu kolumna ustawia dla tabel, które jeszcze inne kolumna s.Jednak wydajność zestawów kolumna można zmniejszyć, gdy wiele indeksy są zdefiniowane w kolumnach tabela.Dzieje się tak, ponieważ zwiększa ilość pamięci wymaganej dla planu wykonania.
Aby zdefiniować kolumna ustawienie, należy użyć <kolumna _set_name> DO słów kluczowych ALL_SPARSE_kolumnaS wTWORZENIE tabela or ALTER tabela instrukcji.
Zalecenia dotyczące używania kolumna zestawów
Korzystając z zestawów kolumna, należy wziąć pod uwagę następujące wskazówki:
Rzadkie kolumna s oraz kolumna zestawu można dodać jako część tej samej instrukcja.
kolumna Zestawu nie mogą być zmieniane.Aby zmienić kolumna, należy usunąć i ponownie utworzyć zestaw kolumn.
A kolumna zestawu nie można dodać do tabela, jeśli w tej tabela znajdują się już rozrzedzone kolumna s.
A kolumna zestawu można dodać do tabela, która nie zawiera żadnych rozrzedzone s kolumna.Jeśli kolumna rozrzedzone później zostaną dodane do tabela, będą one występować zestaw kolumn.
Tylko jeden kolumna zestawu jest dozwolona na tabelę.
A kolumna zestawu jest opcjonalna i nie jest wymagana do używania rozrzedzone kolumna s.
Ograniczenia lub wartości domyślne nie mogą być definiowane w kolumna zestawu.
kolumna obliczane nie mogą zawierać kolumna zestaw kolumn.
Kwerend rozproszonych nie są obsługiwane dla tabel, które zawierają kolumna ustawia.
Replikacja nie obsługuje zestawów kolumna.
Zmiana przechwytywania danych nie obsługuje zestawów kolumna.
A kolumna zestaw nie może być częścią wszelkiego rodzaju indeksu.Obejmuje to XML indeksy pełnotekstowe indeksy i widoków indeksowanych.Nie można dodać zestaw kolumn jako kolumna zawarte w dowolnym indeksu.
A kolumna zestawu nie mogą być używane w wyrażeniu filtru filtrowane indeksu i filtrowane statystyk.
Jeśli widok zawiera zestaw kolumn, zestaw kolumny pojawi się w widoku jako kolumna XML.
Definicja widok indeksowany nie może zawierać zestaw kolumn.
Widoki podzielonym na partycje, które zawierają tabele zawierające zestawy kolumna są mogą być aktualizowane, gdy widoku podzielonym na partycje określa rozrzedzone kolumna, według nazwy.Widokiem podzielonym na partycje nie jest możliwa, gdy odwołuje się on kolumna zestawu.
Kwerendy powiadomień, które odwołują się do kolumna zestawy są niedozwolone.
Dane XML mają limitu rozmiaru 2 GB.Jeśli połączonych danych wszystkich niepustych kolumn sparse w wierszu przekracza ten limit, kwerendy lub operację DML da błąd.
Aby uzyskać informacje na temat danych, która jest zwracana przez funkcja COLUMNS_UPDATED zobacz Using Sparse Columns.
Wskazówki dotyczące wybór danych z zestawu kolumna
Należy wziąć pod uwagę następujące wskazówki do wybierania danych z kolumna ustawić:
Koncepcyjnie zestaw kolumn jest typu mogą być aktualizowane, obliczanej kolumna XML, agregujący zestaw podstawowej relacyjnej kolumn w pojedynczej reprezentacji XML.kolumna Zestaw obsługuje tylko właściwości ALL_SPARSE_kolumnaS.Ta właściwość jest używana do agregowania wszystkich niepustych wartości ze wszystkich kolumn sparse dla określonego wiersza.
W SQL Server Management Studio tabela Edytorze zestawy są wyświetlane jako pole tabela XML edi kolumna. Definiowanie zestawów kolumna w formacie:
<column_name_1>value1</column_name_1><column_name_2>value2</column_name_2>...
Przykłady kolumna zestawu wartości są następujące:
<sparseProp1>10</sparseProp1><sparseProp3>20</sparseProp3>
<DocTitle>Bicycle Parts List</DocTitle><Region>West</Region>
Rzadkie kolumna, które zawierają wartości null są pominięte w reprezentacji XML dla zestaw kolumn.
Ostrzeżenie
Dodawanie kolumna zestaw zmienia zachowanie SELECT * kwerendy.Kwerenda zwróci zestaw kolumn jako kolumna XML i nie zwracać poszczególnych kolumn rozrzedzone.Należy uważać, aby nie przerwać istniejące aplikacje schematu projektantów i deweloperów oprogramowania.
Wstawianie lub modyfikowanie danych w zestawie kolumna
Manipulowanie kolumna rozrzedzona danych mogą być wykonywane za pomocą nazw poszczególnych kolumn lub odwołując się do nazwę zestaw kolumn i określenie wartości w zestaw kolumn ustawić przy użyciu formatu XML zestawu kolumn.kolumna rozrzedzone mogą występować w dowolnej kolejności, kolumna XML.
Gdy rozrzedzone kolumna wartości są wstawione lub zaktualizowane przy użyciu kodu XML kolumna, wartości, które są wstawiane do to podstawowe rozrzedzone kolumna s niejawnie są konwertowane z xml Typ danych. W odniesieniu do kolumn numerycznych puste wartości w formacie XML dla kolumna numerycznej zamienia na pusty ciąg.Powoduje to, że wartość zero ma zostać wstawiony do kolumna numerycznej, jak pokazano w poniższym przykładzie.
CREATE TABLE t (i int SPARSE, cs xml column_set FOR ALL_SPARSE_COLUMNS)
GO
INSERT t(cs) VALUES ('<i/>')
GO
SELECT i FROM t
GO
W tym przykładzie wartość nie została określona dla kolumna i, ale wartość 0 został wstawiony.
Za pomocą typu danych sql_variant
The sql_variant date type can store multiple different data types, such as int, char, and date.Kolumna Ustawia informacje, takie jak informacje skalę, precyzję i regionalny, którą jest skojarzony typ danych wyjściowych sql_variant wartość jako atrybuty w wygenerowanym kolumnie XML. W przypadku próby dostarczyć te atrybuty w deklaracji XML wygenerowany niestandardowy jako dane wejściowe dla operacji wstawiania lub aktualizacji na kolumna, niektóre z tych atrybutów są wymagane i niektóre z nich są przypisane wartości domyślne.W poniższej tabela wymieniono typy danych i wartości domyślne, które generuje serwer, jeśli nie podano wartości.
Typ danych |
LCID * |
sqlCompareOptions |
sqlCollationVersion |
SqlSortId |
Maksymalna długość |
Precyzja |
Skala |
---|---|---|---|---|---|---|---|
char, varchar, binary |
-1 |
"Domyślny" |
0 |
0 |
8000 |
Nie dotyczy ** |
Nie dotyczy |
nvarchar |
-1 |
"Domyślny" |
0 |
0 |
4000 |
Nie dotyczy |
Nie dotyczy |
decimal, float, real |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
18 |
0 |
integer, bigint, tinyint, smallint |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
datetime2 |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
7 |
datetime offset |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
7 |
datetime, date, smalldatetime |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
money, smallmoney |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
time |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
Nie dotyczy |
7 |
* LCID -1 oznacza domyślne regionalny.regionalny języka angielskiego jest 1033.
** Nie dotyczy = No wartości są dane wyjściowe tych atrybutów podczas operacji select na kolumna zestawu.Generuje błąd, gdy określono wartość dla tego atrybut przez obiekt wywołujący w reprezentacji XML przewidziane kolumna w operacji wstawiania lub aktualizacji.
Zabezpieczenia
Model zabezpieczeń dla kolumna ustaw działa podobnie do modelu zabezpieczeń, który istnieje między tabelą a kolumna.Zestawy kolumna może być wywołuje jako minitable i wybierz działanie jest jak SELECT * operacji na tym minitable.Ale relację między kolumna zestaw rozrzedzone kolumna s to relacja typu grupowanie zamiast ściśle w kontenerze.Model zabezpieczeń kontroli zabezpieczeń kolumna ustawić kolumna i uwzględnia zdefiniowane operacji DENY na to podstawowe rozrzedzone kolumna s.Dodatkowe właściwości modelu zabezpieczeń są następujące:
Uprawnienia zabezpieczeń mogą być przyznane i odwołane z kolumna zestaw kolumn, podobnie jak inne kolumna w tabela.
GRANT i REVOKE SELECT, INSERT, UPDATE, DELETE i materiały referencyjne uprawnienia w odniesieniu do zestaw kolumn kolumna nie propagowane do podstawowej kolumn element członkowski tego zestawu.Dotyczy to tylko użycia kolumna zestaw kolumn.Uprawnienie do DENY a kolumna zestawu propagowane do podstawowej rozrzedzone kolumna s tabela.
Wykonywanie SELECT, instrukcje INSERT, UPDATE i DELETE na kolumnie zestaw kolumn wymagają, że użytkownik ma odpowiednie uprawnienia na kolumnie zestaw kolumn, a także odpowiednie uprawnienia na wszystkich kolumn sparse w tabela.Ponieważ kolumna zestaw reprezentuje wszystkie to rozrzedzone kolumna s w tabela, trzeba mieć uprawnienia na wszystkich to rozrzedzone kolumna s i obejmuje rozrzedzone kolumna s może nie być zmieniane.
Wykonywanie instrukcja REVOKE rozrzedzone kolumna lub zestaw kolumn domyślnie zabezpieczeń ich obiektu nadrzędnego.
Przykłady
W poniższych przykładach tabela dokument zawiera zestaw wspólnych kolumn DocID i Title. Grupy produkcji chce ProductionSpecification i ProductionLocation kolumna dla wszystkich dokumentów produkcyjnych. Grupa marketingu chce MarketingSurveyGroup kolumna dla dokumentów sprzedaży.
A.Tworzenie tabela ma kolumna zestawu
Poniższy przykład tworzy tabela, która używa rozrzedzone kolumna s i zawiera kolumna zestawu SpecialPurposeColumns. W przykładzie wstawia dwa wiersze w tabela, a następnie zaznaczyć dane z tabela.
Uwaga
Ta tabela ma tylko pięć kolumn, aby ułatwić wyświetlanie i przeczytać.
USE AdventureWorks;
GO
CREATE TABLE DocumentStoreWithColumnSet
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,
ProductionSpecification varchar(20) SPARSE NULL,
ProductionLocation smallint SPARSE NULL,
MarketingSurveyGroup varchar(20) SPARSE NULL,
MarketingProgramID int SPARSE NULL,
SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);
GO
B.Wstawianie danych do tabela za pomocą nazwy kolumn sparse
W poniższych przykładach wstawić dwa wiersze w tabela, która jest tworzona w przykładzie A.Przykłady nazw rozrzedzone kolumna s i nie odwoływać się kolumna zestawu.
INSERT DocumentStoreWithColumnSet (DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO
INSERT DocumentStoreWithColumnSet (DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35')
GO
C.Wstawianie danych do tabela za pomocą nazwy kolumna zestawu
W poniższym przykładzie wstawia trzeci wiersz do tabela, która jest tworzona w przykładzie A.Tym razem nazwy rozrzedzone kolumn nie są używane.Można natomiast nazwa kolumna zestaw jest używany i insert zawiera wartości dla dwóch cztery rozrzedzone kolumna s w formacie XML.
INSERT DocumentStoreWithColumnSet (DocID, Title, SpecialPurposeColumns)
VALUES (3, 'Tire Spec 2', '<ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation>')
GO
D.Posługując się wyniki kolumna ustawione podczas SELECT * jest używany
W poniższym przykładzie następuje wybranie wszystkich to kolumna s z tabela, która zawiera kolumna zestawu.Zwraca wartość XML kolumna z połączonych wartości rozrzedzone s kolumna.Jej nie zwraca kolumny rozrzedzone indywidualnie okna.
SELECT * FROM DocumentStoreWithColumnSet ;
Here is the result set.
Tytuł DocID SpecialPurposeColumns
1 Specyfikacja opona 1 <ProductionSpecification>AXZZ217</ ProductionSpecification><ProductionLocation>27</ ProductionLocation>
2 2142 Ankiety <MarketingSurveyGroup>Mężczyzn 25-35</ MarketingSurveyGroup>
3 Specyfikacja opona 2 <ProductionSpecification>AXW9R411</ ProductionSpecification><ProductionLocation>38</ ProductionLocation>
E.Posługując się wyniki zaznaczania kolumna określonym przez nazwę
Ponieważ dział produkcji nie jest zainteresowana obrotu danych, w tym przykładzie dodaje WHERE Klauzula ogranicza dane wyjściowe. W przykładzie użyto nazwy kolumna zestawu.
SELECT DocID, Title, SpecialPurposeColumns
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;
Here is the result set.
Tytuł DocID SpecialPurposeColumns
1 Specyfikacja opona 1 <ProductionSpecification>AXZZ217</ ProductionSpecification><ProductionLocation>27</ ProductionLocation>
3 Specyfikacja opona 2 <ProductionSpecification>AXW9R411</ ProductionSpecification><ProductionLocation>38</ ProductionLocation>
F.Posługując się wyniki zaznaczania kolumn rozrzedzone według nazwy
Jeśli tabela zawiera kolumna, nadal kwerendy można w tabeli przy użyciu poszczególnych kolumna nazwy, jak pokazano w poniższym przykładzie.
SELECT DocID, Title, ProductionSpecification, ProductionLocation
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;
Here is the result set.
Tytuł DocID ProductionSpecification ProductionLocation
1 Opona Spec 1 AXZZ217 27
3 Specyfikacja 2 AXW9R411 tire 38
G.Aktualizowanie tabela za pomocą kolumna zestawu
W poniższym przykładzie aktualizuje trzeciego rekordu nowe wartości dla obu rozrzedzone kolumn, które są używane przez ten wiersz.
UPDATE DocumentStoreWithColumnSet
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification><ProductionLocation>38</ProductionLocation>'
WHERE DocID = 3 ;
GO
Important Note: |
---|
Instrukcja UPDATE, który używa zestaw kolumn aktualizuje rozrzedzone kolumn w tabela.Rozrzedzone kolumny, które nie mają odwołania są aktualizowane w taki sposób, aby wartość NULL. |
W poniższym przykładzie aktualizuje trzeciego rekordu, ale tylko określa wartość jednego z dwóch kolumn wypełnionego.Druga kolumna ProductionLocation nie wchodzi w skład UPDATE Instrukcja i jest aktualizowany do wartości NULL.
UPDATE DocumentStoreWithColumnSet
SET SpecialPurposeColumns = '<ProductionSpecification>ZZ285W</ProductionSpecification>'
WHERE DocID = 3 ;
GO