Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

OPENROWSET

Termin Definicja
OPENROWSET

OPENROWSET to funkcja odczytująca dane ze źródła zewnętrznego lub pliku, wymagająca włączenia zapytań rozproszonych.

OPENROWSET w SQL Server i odczyt danych spoza bazy

OPENROWSET to funkcja języka Transact-SQL używana w Microsoft SQL Server do jednorazowego odczytu danych z zewnętrznego źródła. Może otworzyć połączenie z dostawcą OLE DB albo odczytać zawartość pliku za pomocą wariantu BULK. Wynik działania jest traktowany jak zestaw danych, dlatego można go wykorzystać w instrukcji SELECT, połączyć z tabelą przez JOIN albo zapisać do tabeli docelowej za pomocą INSERT ... SELECT. OPENROWSET nie tworzy stałego obiektu tabeli ani trwałego połączenia z obcym źródłem.

W przypadku źródła typu OLE DB wywołanie określa między innymi nazwę dostawcy, parametry połączenia, katalog oraz zapytanie wykonywane w zewnętrznym źródle. Przykładowa konstrukcja ma postać OPENROWSET('provider_name', 'connection_string', 'query'). Dokładna składnia zależy od używanego dostawcy, jego zainstalowanej wersji oraz sposobu uwierzytelniania. SQL Server musi mieć dostęp do odpowiedniego providera, a konfiguracja instancji nie może blokować wykonywania zapytań ad hoc do zewnętrznych źródeł.

Włączenie zapytań rozproszonych i wymagania środowiskowe

OPENROWSET korzystający z dostawcy OLE DB jest związany z opcją konfiguracyjną Ad Hoc Distributed Queries. Jeżeli opcja jest wyłączona, próba wykonania takiego odwołania może zakończyć się błędem informującym o braku dostępu do dostawców ad hoc. Ustawienie zmienia się na poziomie instancji SQL Server, zwykle przez sp_configure po włączeniu zaawansowanych opcji konfiguracyjnych. Zmiana wymaga odpowiednich uprawnień administracyjnych i powinna być poprzedzona sprawdzeniem, czy jest rzeczywiście potrzebna.

Przy odczycie pliku ważne jest, z jakiego konta działa usługa SQL Server. Ścieżka lokalna jest interpretowana w kontekście serwera bazy danych, a nie komputera, z którego wysłano zapytanie. Jeżeli plik znajduje się na udziale sieciowym, konto usługi musi mieć uprawnienia do odczytu tego udziału i systemu plików. Sam fakt, że plik można otworzyć w Eksploratorze Windows na komputerze administratora, nie oznacza jeszcze, że SQL Server może go odczytać.

OPENROWSET(BULK) do importu plików binarnych i tekstowych

Specjalny wariant OPENROWSET(BULK ...) służy do odczytu plików bez korzystania z klasycznego zapytania do zewnętrznej tabeli. Opcja SINGLE_BLOB zwraca cały plik jako jedną wartość typu varbinary(max), SINGLE_CLOB odczytuje całą zawartość jako varchar(max), a SINGLE_NCLOB jako nvarchar(max). Taki sposób bywa używany przy wczytywaniu dokumentów, obrazów, plików binarnych albo całych plików tekstowych do tabeli przechowującej dane w kolumnach typu varbinary(max), varchar(max) lub nvarchar(max).

OPENROWSET(BULK) nie jest uniwersalnym parserem każdego formatu. Odczyt całego pliku jako pojedynczej wartości nie oznacza automatycznego rozpoznania kolumn, separatorów, nagłówków czy typów danych. Jeżeli plik ma strukturę tabelaryczną, dalsze przetwarzanie wymaga odpowiedniego mechanizmu importu i jawnego opisania formatu. Warto również rozróżnić odczyt bajtów od interpretacji tekstu: wybór CLOB albo NCLOB wpływa na sposób traktowania danych znakowych, natomiast uszkodzone kodowanie może prowadzić do nieprawidłowych znaków lub błędu podczas konwersji.

Diagnozowanie błędów połączenia, providera i uprawnień

Problemy z OPENROWSET zwykle dotyczą jednej z kilku warstw: konfiguracji instancji, dostępności providera OLE DB, parametrów połączenia, uprawnień do źródła albo samej składni zapytania. Warto sprawdzić, czy nazwa providera jest zarejestrowana na serwerze SQL Server i czy jego architektura jest zgodna z instancją. Należy także zweryfikować, czy zapytanie przekazywane do zewnętrznego źródła jest poprawne dla tego konkretnego systemu, ponieważ OPENROWSET nie tłumaczy automatycznie składni innego silnika bazodanowego na Transact-SQL.

Wariant BULK wymaga dodatkowo sprawdzenia ścieżki, dostępności pliku oraz uprawnień konta usługi. Przy analizie diagnostycznej należy odtworzyć problem z tym samym serwerem, instancją i kontem wykonującym operację, a nie wyłącznie z lokalnego narzędzia administracyjnego. Trzeba też ocenić rozmiar pliku i typ zwracanej wartości, ponieważ wczytanie dużego obiektu do pamięci lub dalsza konwersja danych może zwiększyć obciążenie instancji. W środowisku produkcyjnym konfigurację zapytań ad hoc i dostęp providerów należy kontrolować zgodnie z przyjętą polityką administracyjną.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę