Udostępnij za pośrednictwem


Aktualizacje umieszczone (ODBC)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Funkcja ODBC obsługuje dwie metody przeprowadzania aktualizacji umieszczonych w kursorze:

  • SQLSetPos

  • WHERE CURRENT OF, klauzula

Bardziej typowym podejściem jest użycie SQLSetPos. Dostępne są następujące opcje.

SQL_POSITION
Umieszcza kursor w określonym wierszu w bieżącym zestawie wierszy.

SQL_REFRESH
Odświeża zmienne programu powiązane z kolumnami zestawu wyników z wartościami z wiersza, na których znajduje się kursor.

SQL_UPDATE
Aktualizuje bieżący wiersz w kursorze wartościami przechowywanymi w zmiennych programu powiązanymi z kolumnami zestawu wyników.

SQL_DELETE
Usuwa bieżący wiersz w kursorze.

SQLSetPos można używać z dowolnym zestawem wyników instrukcji, gdy atrybuty kursora obsługi instrukcji są ustawione na używanie kursorów serwera. Kolumny zestawu wyników muszą być powiązane ze zmiennymi programowymi. Gdy tylko aplikacja pobrała wiersz, wywołuje sqlSetPos(SQL_POSITION), aby umieścić kursor w wierszu. Następnie aplikacja może wywołać polecenie SQLSetPos(SQL_DELETE), aby usunąć bieżący wiersz, lub przenieść nowe wartości danych do powiązanych zmiennych programu i wywołać polecenie SQLSetPos(SQL_UPDATE), aby zaktualizować bieżący wiersz.

Aplikacje mogą aktualizować lub usuwać dowolny wiersz w zestawie wierszy za pomocą SQLSetPos. Wywoływanie SQLSetPos to wygodna alternatywa dla konstruowania i wykonywania instrukcji SQL. sqlSetPos działa na bieżącym zestawie wierszy i może być używany tylko po wywołaniu SQLFetchScroll.

Rozmiar zestawu wierszy jest ustawiany przez wywołanie SQLSetStmtAttr z argumentem atrybutu SQL_ATTR_ROW_ARRAY_SIZE. sqlSetPos używa nowego rozmiaru zestawu wierszy, ale tylko po wywołaniu SQLFetch lub SQLFetchScroll. Na przykład jeśli rozmiar zestawu wierszy zostanie zmieniony, SQLSetPos jest wywoływana, a następnie wywoływana jest SQLFetch Lub SQLFetchScroll. Wywołanie SQLSetPos używa starego rozmiaru zestawu wierszy, ale SQLFetch lub SQLFetchScroll używa nowego rozmiaru zestawu wierszy.

Pierwszy wiersz w zestawie wierszy to wiersz numer 1. Argument RowNumber w SQLSetPos musi zidentyfikować wiersz w zestawie wierszy; oznacza to, że jego wartość musi należeć do zakresu od 1 do liczby wierszy, które zostały ostatnio pobrane. Może to być mniejsze niż rozmiar zestawu wierszy. Jeśli argument RowNumber ma wartość 0, operacja ma zastosowanie do każdego wiersza w zestawie wierszy.

Operacja usuwania SQLSetPos powoduje usunięcie źródła danych co najmniej jednego wybranego wiersza tabeli. Aby usunąć wiersze z sqlSetPos, aplikacja wywołuje SQLSetPos z ustawieniem Operacja ustawioną na SQL_DELETE i RowNumber ustawioną na liczbę wierszy do usunięcia. Jeśli argument RowNumber ma wartość 0, wszystkie wiersze w zestawie wierszy zostaną usunięte.

Po zwraca SQLSetPos usunięty wiersz jest bieżącym wierszem, a jego stan jest SQL_ROW_DELETED. Wiersz nie może być używany w żadnych dodatkowych operacjach umieszczonych, takich jak wywołania SQLGetData lub SQLSetPos.

Usunięcie wszystkich wierszy zestawu wierszy (RowNumber jest równe 0), aplikacja może uniemożliwić sterownikowi usunięcie niektórych wierszy przy użyciu tablicy operacji wierszy, podobnie jak w przypadku operacji aktualizacji SQLSetPos.

Każdy usunięty wiersz powinien być wierszem, który istnieje w zestawie wyników. Jeśli aplikacji zostały wypełnione przez pobieranie, a tablica stanu wiersza została zachowana, jej wartości w każdym z tych pozycji wierszy nie powinny być SQL_ROW_DELETED, SQL_ROW_ERROR lub SQL_ROW_NOROW.

Aktualizacje rozmieszczone można również wykonywać przy użyciu klauzuli WHERE CURRENT OF w instrukcjach UPDATE, DELETE i INSERT. GDZIE CURRENT OF wymaga nazwy kursora, która będzie generowana po wywołaniu funkcji SQLGetCursorName lub którą można określić przez wywołanie SQLSetCursorName. Poniżej przedstawiono ogólne kroki używane do wykonywania instrukcji WHERE CURRENT OF update w aplikacji ODBC:

  • Wywołaj SQLSetCursorName, aby ustanowić nazwę kursora dla uchwytu instrukcji.

  • Skompiluj instrukcję SELECT z klauzulą FOR UPDATE OF i wykonaj ją.

  • Wywołaj sqlFetchScroll, aby pobrać zestaw wierszy lub SQLFetch w celu pobrania wiersza.

  • Wywołaj sqlSetPos (SQL_POSITION), aby umieścić kursor w wierszu.

  • Skompiluj i wykonaj instrukcję UPDATE z klauzulą WHERE CURRENT OF przy użyciu nazwy kursora ustawionej za pomocą SQLSetCursorName.

Alternatywnie można wywołać SQLGetCursorName po wykonaniu instrukcji SELECT zamiast wywołać SQLSetCursorName przed wykonaniem instrukcji SELECT. SQLGetCursorName zwraca domyślną nazwę kursora przypisaną przez ODBC, jeśli nie ustawisz nazwy kursora przy użyciu SQLSetCursorName.

SQLSetPos jest preferowana w obszarze WHERE CURRENT OF podczas korzystania z kursorów serwera. Jeśli używasz statycznego, aktualizowalnego kursora z biblioteką kursorów ODBC, biblioteka kursorów implementuje funkcję WHERE CURRENT OF updates przez dodanie klauzuli WHERE z wartościami klucza dla tabeli bazowej. Może to spowodować niezamierzone aktualizacje, jeśli klucze w tabeli nie są unikatowe.

Zobacz też

przy użyciu kursorów (ODBC)