Zestawy wierszy i kursory programu SQL Server
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Program SQL Server zwraca zestawy wyników użytkownikom przy użyciu dwóch metod:
Domyślne zestawy wyników, które:
Zminimalizuj obciążenie.
Zapewnia maksymalną wydajność podczas pobierania danych.
Obsługa tylko domyślnej funkcji tylko do przekazywania i tylko do odczytu kursora.
Zwraca wiersze do odbiorcy jeden wiersz jednocześnie.
Obsługa tylko jednej aktywnej instrukcji naraz na połączeniu.
Po wykonaniu instrukcji nie można wykonać żadnych innych instrukcji w połączeniu, dopóki wszystkie wyniki nie zostaną pobrane przez konsumenta lub instrukcja została anulowana.
Obsługa wszystkich instrukcji Transact-SQL.
Kursory serwera, które:
Obsługa wszystkich funkcji kursora.
Może zwracać bloki wierszy do odbiorcy.
Obsługa wielu aktywnych instrukcji na jednym połączeniu.
Równoważenie funkcjonalności kursora względem wydajności.
Obsługa funkcji kursora może zmniejszyć wydajność względem domyślnego zestawu wyników. Można to zrównoważyć, jeśli użytkownik może użyć funkcji kursora, aby pobrać mniejszy zestaw wierszy.
Nie obsługuje żadnej instrukcji Transact-SQL zwracającej więcej niż jeden zestaw wyników.
Użytkownicy mogą żądać różnych zachowań kursora w zestawie wierszy, ustawiając niektóre właściwości zestawu wierszy. Jeśli użytkownik nie ustawi żadnej z tych właściwości zestawu wierszy lub ustawi je wszystkie na wartości domyślne, sterownik OLE DB dla programu SQL Server implementuje zestaw wierszy przy użyciu domyślnego zestawu wyników. Jeśli którakolwiek z tych właściwości jest ustawiona na wartość inną niż domyślna, sterownik OLE DB dla programu SQL Server implementuje zestaw wierszy przy użyciu kursora serwera.
Następujące właściwości zestawu wierszy kierują sterownik OLE DB dla programu SQL Server do korzystania z kursorów programu SQL Server. Niektóre właściwości można bezpiecznie łączyć z innymi. Na przykład zestaw wierszy, który wykazuje właściwości DBPROP_IRowsetScroll i DBPROP_IRowsetChange, będzie zestawem wierszy zakładek, które wykazują natychmiastowe zachowanie aktualizacji. Inne właściwości wzajemnie się wykluczają. Na przykład zestaw wierszy przedstawiający DBPROP_OTHERINSERT nie może zawierać zakładek.
Identyfikator właściwości | Wartość | Zachowanie zestawu wierszy |
---|---|---|
DBPROP_SERVERCURSOR | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy jest sekwencyjny i obsługuje tylko przewijanie do przodu i pobieranie. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. |
DBPROP_CANSCROLLBACKWARDS lub DBPROP_CANFETCHBACKWARDS | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje przewijanie i pobieranie w obu kierunkach. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. |
DBPROP_BOOKMARKS lub DBPROP_LITERALBOOKMARKS | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy jest sekwencyjny i obsługuje tylko przewijanie do przodu i pobieranie. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. |
DBPROP_OWNUPDATEDELETE lub DBPROP_OWNINSERT lub DBPROP_OTHERUPDATEDELETE | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje przewijanie i pobieranie w obu kierunkach. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. |
DBPROP_OTHERINSERT | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje przewijanie i pobieranie w obu kierunkach. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY, jeśli indeks istnieje w kolumnach, do których odwołuje się odwołanie. DBPROP_OTHERINSERT nie można VARIANT_TRUE, jeśli zestaw wierszy zawiera zakładki. Próba utworzenia zestawu wierszy z tą właściwością widoczności i zakładkami powoduje błąd. |
DBPROP_IRowsetLocate lub DBPROP_IRowsetScroll | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje przewijanie i pobieranie w obu kierunkach. Zakładki i bezwzględne pozycjonowanie za pośrednictwem interfejsu IRowsetLocate są obsługiwane w zestawie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. DBPROP_IRowsetLocate i DBPROP_IRowsetScroll wymagają zakładek w zestawie wierszy. Próba utworzenia zestawu wierszy z zakładkami i DBPROP_OTHERINSERT ustawiona na VARIANT_TRUE powoduje błąd. |
DBPROP_IRowsetChange lub DBPROP_IRowsetUpdate | VARIANT_TRUE | Może aktualizować dane programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy jest sekwencyjny i obsługuje tylko przewijanie do przodu i pobieranie. Obsługiwane jest względne pozycjonowanie wierszy. Wszystkie polecenia obsługujące kursory z możliwością aktualizacji mogą obsługiwać te interfejsy. |
DBPROP_IRowsetLocate lub DBPROP_IRowsetScroll i DBPROP_IRowsetChange lub DBPROP_IRowsetUpdate | VARIANT_TRUE | Może aktualizować dane programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje przewijanie i pobieranie w obu kierunkach. Zakładki i pozycjonowanie bezwzględne za pośrednictwem IRowsetLocate są obsługiwane w zestawie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY. |
DBPROP_IMMOBILEROWS | VARIANT_FALSE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje tylko przewijanie do przodu. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY, jeśli indeks istnieje w kolumnach, do których odwołuje się odwołanie. DBPROP_IMMOBILEROWS jest dostępna tylko w zestawach wierszy, które mogą wyświetlać wiersze programu SQL Server wstawione przez polecenia w innych sesjach lub przez innych użytkowników. Próba otwarcia zestawu wierszy z właściwością ustawioną na VARIANT_FALSE w dowolnym zestawie wierszy, dla którego DBPROP_OTHERINSERT nie może być VARIANT_TRUE powoduje błąd. |
DBPROP_REMOVEDELETED | VARIANT_TRUE | Nie można zaktualizować danych programu SQL Server za pomocą zestawu wierszy. Zestaw wierszy obsługuje tylko przewijanie do przodu. Obsługiwane jest względne pozycjonowanie wierszy. Tekst polecenia może zawierać klauzulę ORDER BY, chyba że jest ograniczona przez inną właściwość. |
Sterownik OLE DB dla zestawu wierszy programu SQL Server obsługiwany przez kursor serwera można łatwo utworzyć w podstawowej tabeli lub widoku programu SQL Server przy użyciu metody IOpenRowset::OpenRowset. Określ tabelę lub widok według nazwy, przekazując wymagane zestawy właściwości zestawu wierszy w parametrze rgPropertySets.
Tekst polecenia, który tworzy zestaw wierszy, jest ograniczony, gdy odbiorca wymaga, aby zestaw wierszy był obsługiwany przez kursor serwera. W szczególności tekst polecenia jest ograniczony do pojedynczej instrukcji SELECT, która zwraca pojedynczy wynik zestawu wierszy lub procedurę składowaną, która implementuje pojedynczą instrukcję SELECT zwracającą wynik pojedynczego zestawu wierszy.
Te dwie tabele przedstawiają mapowania różnych właściwości OLE DB i modeli kursorów. Pokazują również, które właściwości zestawu wierszy powinny być ustawione, aby używać określonego typu modelu kursora.
Każda komórka w tabeli zawiera wartość właściwości zestawu wierszy dla określonego modelu kursora. Typ danych wszystkich właściwości zestawu wierszy wymienionych wcześniej w tym temacie jest VT_BOOL, a wartość domyślna to VARIANT_FALSE. W tabeli są używane następujące symbole.
F = wartość domyślna (VARIANT_FALSE)
T = VARIANT_TRUE
- = VARIANT_TRUE lub VARIANT_FALSE
Aby użyć określonego typu modelu kursora, znajdź kolumnę odpowiadającą modelowi kursora i znajdź wszystkie właściwości zestawu wierszy o wartości "T" w kolumnie. Ustaw te właściwości zestawu wierszy, aby VARIANT_TRUE używać określonego modelu kursora. Właściwości zestawu wierszy z wartością "-" można ustawić na wartość VARIANT_TRUE lub VARIANT_FALSE.
Właściwości zestawu wierszy/modele kursora | Domyślny wynik zbiór (RO) |
Szybki naprzód- tylko (RO) |
Statyczny (RO) |
Zestawu kluczy Napędzany (RO) |
---|---|---|---|---|
DBPROP_SERVERCURSOR | F | T | T | T |
DBPROP_DEFERRED | F | F | - | - |
DBPROP_IrowsetChange | F | F | F | F |
DBPROP_IrowsetLocate | F | F | - | - |
DBPROP_IrowsetScroll | F | F | - | - |
DBPROP_IrowsetUpdate | F | F | F | F |
DBPROP_BOOKMARKS | F | F | - | - |
DBPROP_CANFETCHBACKWARDS | F | F | - | - |
DBPROP_CANSCROLLBACKWARDS | F | F | - | - |
DBPROP_CANHOLDROWS | F | F | - | - |
DBPROP_LITERALBOOKMARKS | F | F | - | - |
DBPROP_OTHERINSERT | F | T | F | F |
DBPROP_OTHERUPDATEDELETE | F | T | F | T |
DBPROP_OWNINSERT | F | T | F | T |
DBPROP_OWNUPDATEDELETE | F | T | F | T |
DBPROP_QUICKSTART | F | F | - | - |
DBPROP_REMOVEDELETED | F | F | F | - |
DBPROP_IrowsetResynch | F | F | F | - |
DBPROP_CHANGEINSERTEDROWS | F | F | F | F |
DBPROP_SERVERDATAONINSERT | F | F | F | - |
DBPROP_UNIQUEROWS | - | F | F | F |
DBPROP_IMMOBILEROWS | - | - | - | T |
Właściwości zestawu wierszy/Modele kursora | Dynamiczne (RO) | Zestaw kluczy (R/W) | Dynamiczny (R/W) |
---|---|---|---|
DBPROP_SERVERCURSOR | T | T | T |
DBPROP_DEFERRED | - | - | - |
DBPROP_IrowsetChange | F | - | - |
DBPROP_IrowsetLocate | F | - | F |
DBPROP_IrowsetScroll | F | - | F |
DBPROP_IrowsetUpdate | F | - | - |
DBPROP_BOOKMARKS | F | - | F |
DBPROP_CANFETCHBACKWARDS | - | - | - |
DBPROP_CANSCROLLBACKWARDS | - | - | - |
DBPROP_CANHOLDROWS | F | - | F |
DBPROP_LITERALBOOKMARKS | F | - | F |
DBPROP_OTHERINSERT | T | F | T |
DBPROP_OTHERUPDATEDELETE | T | T | T |
DBPROP_OWNINSERT | T | T | T |
DBPROP_OWNUPDATEDELETE | T | T | T |
DBPROP_QUICKSTART | - | - | - |
DBPROP_REMOVEDELETED | T | - | T |
DBPROP_IrowsetResynch | - | - | - |
DBPROP_CHANGEINSERTEDROWS | F | - | F |
DBPROP_SERVERDATAONINSERT | F | - | F |
DBPROP_UNIQUEROWS | F | F | F |
DBPROP_IMMOBILEROWS | F | T | F |
Dla określonego zestawu właściwości zestawu wierszy wybrany model kursora jest określany w następujący sposób.
Z określonej kolekcji właściwości zestawu wierszy uzyskaj podzbiór właściwości wymienionych w poprzednich tabelach. Podziel te właściwości na dwie podgrupy w zależności od wymaganej wartości flagi (T, F) lub opcjonalnej (-)-każdej właściwości zestawu wierszy. Dla każdego modelu kursora zacznij od pierwszej tabeli i przejdź od lewej do prawej. Porównaj wartości właściwości w dwóch podgrupach z wartościami odpowiednich właściwości w tej kolumnie. Model kursora, który nie ma niezgodności z wymaganymi właściwościami, a wybrana jest najmniejsza liczba niezgodności z opcjonalnymi właściwościami. Jeśli istnieje więcej niż jeden model kursora, zostanie wybrany lewy.
Rozmiar bloku kursora programu SQL Server
Gdy kursor programu SQL Server obsługuje sterownik OLE DB dla zestawu wierszy programu SQL Server, liczba elementów w parametrze tablicy dojścia wiersza IRowset::GetNextRows lub IRowsetLocate::GetRowsAt metody definiują rozmiar bloku kursora. Wiersze wskazywane przez uchwyty w tablicy są elementami członkowskimi bloku kursora.
W przypadku zestawów wierszy obsługujących zakładki dojścia wierszy pobranych przy użyciu IRowsetLocate::GetRowsByBookmark metoda definiuje elementy członkowskie bloku kursora.
Niezależnie od metody użytej do wypełnienia zestawu wierszy i utworzenia bloku kursora programu SQL Server blok kursora jest aktywny do momentu wykonania następnej metody pobierania wierszy w zestawie wierszy.