OPENROWSET (Transact-SQL)
Zawiera wszystkie informacje o połączeniu, który jest wymagany dostęp do dane zdalne .Ta metoda jest alternatywą do uzyskiwania dostępu do tabel w serwer połączony i jest jedno -czas, metoda ad hoc podłączenie i dostęp do dane zdalne OLE DB.Do częstszego odwołania do źródła danych OLE DB należy używać serwerów połączonych.Aby uzyskać więcej informacji, zobacz Łączenie serwerów.funkcja OPENROWSET można odwoływać się w klauzula FROM kwerendy tak, jakby była nazwa tabela .funkcja OPENROWSET może określany również jako miejsce docelowetabela INSERT, UPDATE lub DELETE instrukcja, z zastrzeżeniem możliwościdostawcaOLE DB. Mimo że kwerenda może zwracać wiele zestawów wyników, OPENROWSET zwraca tylko pierwszy z nich.
OPENROWSET obsługuje także operacje zbiorcze wbudowanych luzem dostawca umożliwiający danych z pliku do odczytu i zwracane jako zestaw wierszy.
Składnia
OPENROWSET
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog. ] [ schema. ] object
| 'query'
}
| BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
} )
<bulk_options> ::=
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , ERRORFILE = 'file_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ROWS_PER_BATCH = rows_per_batch ]
[ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ]
Argumenty
'provider_name'
Jest znak ciąg , który reprezentuje przyjazna nazwa (lub Identyfikator PROGID) OLE DB dostawca określony w rejestrze.provider_namenie ma wartości domyślnej.'datasource'
Jest ciąg stała odpowiadającą określonej danych OLE DB źródło.datasourcejest DBPROP_INIT_DATASOURCE właściwość mają być przekazywane do IDBProperties interfejs dostawca zainicjować dostawca.Zazwyczaj ten ciąg zawiera nazwę plik bazy danych, nazwę serwera bazy danych lub nazwę dostawca rozumie, aby zlokalizować bazę danych i baz danych.'user_id'
Jest ciągstała , która jest nazwą użytkownika przekazane do określonegodostawcaOLE DB. user_idOkreśla kontekst zabezpieczeń dla połączenia i jest przekazywana jako DBPROP_AUTH_USERID właściwość , aby zainicjować dostawca.user_idnie może być nazwa logowania do systemu Microsoft Windows.'password'
Jest ciągstała , która jest hasło użytkownika mają być przekazywane dodostawcaOLE DB. passwordjest przekazywana jako DBPROP_AUTH_PASSWORD właściwość podczas inicjowania dostawca.passwordnie może być hasła w systemie Microsoft Windows.'provider_string'
dostawca— określonego parametry połączenia , który jest przekazywana jako DBPROP_INIT_PROVIDERSTRING właściwość , aby zainicjowaćdostawcaOLE DB. provider_stringZazwyczaj hermetyzuje wszystkie informacje o połączeniu wymagane zainicjować dostawca.Aby uzyskać listę słów kluczowych, które są rozpoznawane przez SQL Server macierzystego klienta OLE DB dostawca, zobacz Inicjowanie i właściwości autoryzacji.catalog
Jest nazwą katalogu lub bazy danych, w którym znajduje się określony obiekt.schema
Jest nazwą właściciela schematu lub obiektu dla określonego obiektu.object
Jest nazwa obiektu, który unikatowo identyfikuje obiekt, aby pracować.'query'
Jest ciąg stała przesyłane do i wykonywane przez dostawca.Lokalne wystąpienie z SQL Server nie przetwarzają tej kwerendy, ale przetwarza kwerendy wyniki zwróconych przez dostawca, kwerenda przekazująca.Kwerendy przekazujące są przydatne dla dostawców, którzy nie udostępnia ich danych tabelarycznych za pomocą tabela nazw, ale tylko za pomocą języka polecenia.Kwerendy przekazujące są obsługiwane na serwerze zdalnym, jak długo kwerendy dostawca obsługuje OLE DB Command obiekt i jego interfejsy obowiązkowe.Aby uzyskać więcej informacji, zobacz SQL Server Native Client (OLE DB) odniesienia.LUZEM
zestaw wierszyzbiorczejdostawca OPENROWSET używa odczytać danych z pliku. W SQL Server, OPENROWSET może czytać z pliku danych bez ładowania danych do miejsce docelowe tabela.Dzięki temu można używać OPENROWSET z prostą instrukcjaSELECT.Argumenty opcja luzem umożliwienia znacznej kontroli nad w przypadku rozpoczęcia i zakończenia odczytywania danych, sposobu postępowania z błędami i w jaki sposób dane są interpretowane.Na przykład można określić, że plik danych rozumiane jako pojedynczego wiersza jedno -kolumna zestaw wierszy typu varbinary, varchar, lub nvarchar.Zachowanie domyślne jest opisany w opisach argument, które należy wykonać.
Aby uzyskać informacje na temat opcji luzem zobacz "Uwagi" w dalszej części tego tematu.Aby uzyskać informacje dotyczące uprawnień, które są wymagane przez opcję luzem zobacz "Uprawnienia", w dalszej części tego tematu.
Ostrzeżenie
Gdy używany do importowania danych z model odzyskiwania pełnego, OPENROWSET (luzem...) nie optymalizuje rejestrowania.
Aby uzyskać informacje dotyczące przygotowywania danych do import zbiorczy, zobacz Przygotowywanie danych luzem wywozu lub przywozu.
'data_file'
Jest pełną ścieżka pliku danych, w których dane są kopiowane dotabela miejsce docelowe.FORMATFILE ='format_file_path"
Określa pełną ścieżka plik formatu.SQL Serverobsługuje dwa typy plików w formacie: XML i -XML.plik formatu jest wymagany do definiowania typów kolumna w zestaw wyników.Jedynym wyjątkiem jest, gdy określono SINGLE_CLOB, SINGLE_BLOB lub SINGLE_NCLOB; w takim przypadek plik formatu nie jest wymagany.
Aby uzyskać informacje dotyczące formatu plików, zobacz Luzem Importuj dane przy użyciu formatu pliku.
< bulk_options >
Określa jeden lub więcej argumentów dla opcji luzem.CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Określa strona kodowa danych w pliku danych.Strona KODOWA jest istotne tylko wtedy, gdy dane zawierają char, varchar, lub text kolumny z wartościami znaku więcej niż 127 lub mniej niż 32.Ostrzeżenie
Zaleca się, aby określić nazwę sortowanie dla każdej kolumna w plik formatu.
Wartość CODEPAGE
Opis
AKP
Konwertuje kolumn char, varchar, lub text typu danych ze standardu ANSI /Microsoft Windows strona kodowa (ISO 1252) do SQL Server strona kodowa.
OEM (domyślnie)
Konwertuje kolumn char, varchar, lub text Typ danych z systemu OEM strona kodowa , aby SQL Server strona kodowa.
RAW
Konwersja nie występuje z jednej strona kodowa do innego.Jest to najszybsza opcja.
code_page
Wskazuje źródło strona kodowa , na którym jest zakodowany danych znakowych w pliku danych; na przykład 850.
Ważne:SQL Servernie obsługuje strona kodowa 65001 (kodowanie UTF-8).ERRORFILE ='file_name"
Określa plik używany do zbierania wierszy, które błędy formatowania i nie można przekonwertować na OLE DB zestaw wierszy.Te wiersze są kopiowane do tego pliku błędu z pliku danych "tak jak"jest.Błąd pliku jest tworzony w momencie rozpoczęcia wykonywania polecenia.Błąd będzie uruchamiany, jeżeli plik już istnieje.Ponadto kontrola plik, który ma rozszerzenie.Error.txt jest tworzony.Ten plik odwołuje się każdy wiersz w pliku błędów i zapewnia błędu diagnostyki.Po poprawieniu błędów mogą być ładowane dane.
FIRSTROW =first_row
Określa numer pierwszego wiersza do załadowania.Wartość domyślna to 1.Określa pierwszy wiersz w pliku określone dane.Numery wierszy są określane poprzez liczenie terminatory wiersza.FIRSTROW jest oparte na 1.LASTROW=last_row
Określa ostatni wiersz do załadowania.Wartość domyślna to 0.Wskazuje ostatni wiersz w pliku określone dane.MAXERRORS =maximum_errors
Określa maksymalną liczbę błędów składniowych lub niezgodne wiersze, jak określono w plik formatu, który może występować przed OPENROWSET zgłasza wyjątek.Aż do osiągnięcia MAXERRORS OPENROWSET ignoruje każdy wiersz zły nie ładowania i zlicza Zły wiersz jako jeden błąd.Wartość domyślna dla maximum_errors wynosi 10.
Ostrzeżenie
MAX_ERRORS nie stosuje się do ograniczeń CHECK lub konwertowania money i bigint typów danych.
ROWS_PER_BATCH =rows_per_batch
Określa przybliżoną liczbę wierszy danych w pliku danych.Wartość ta powinna być tego samego rzędu jako rzeczywista liczba wierszy.OPENROWSET zawsze importuje plik danych w jednej partia.Jednakże jeśli określisz rows_per_batch z wartością > 0, procesor kwerend używa wartości rows_per_batch jako wskazówka dla alokacji zasobów w planu kwerend.
Domyślnie ROWS_PER_BATCH jest nieznany.Określanie ROWS_PER_BATCH = 0 jest równoznaczne z pominięciem ROWS_PER_BATCH.
ZAMÓWIENIA ({ column [ASC | DESC ] } [ ,... n] [UNIQUE])
Wskazówkę opcjonalna, która określa sposób sortowania danych w pliku danych.Domyślnie operacja zbiorcza zakłada, że plik danych są nieuporządkowane.Jeśli w określonej kolejności może zostać wykorzystana przez optymalizator kwerendy generowanie bardziej efektywnego planu kwerend, można zwiększyć wydajność.Podczas określania sortowania może być korzystne przykłady obejmują:Wstawianie wierszy do tabela , która ma indeks klastrowany, gdzie dane zestaw wierszy są sortowane na indeks klastrowany klucz.
Dołączanie do zestaw wierszy z innej tabela, których odpowiadają kolumny sortowania i łączyć .
Agregowania danych zestaw wierszy przez sortowanie kolumn.
Za pomocą zestaw wierszy jako źródło tabela w klauzula FROM kwerendy, których odpowiadają kolumny sortowania i łączyć .
UNIQUE Określa, że plik danych nie ma duplikatów wpisów.
Jeśli rzeczywiste wiersze w pliku danych nie są sortowane w kolejności określonej lub unikatowych wskazówka jest określony i występują duplikaty kluczy, zwracany jest błąd.
Aliasów kolumn są wymagane, gdy zamówienie jest używany.Lista kolumna alias musi odwoływać się pochodne tabela jest uzyskiwany przez luzem klauzula.Nazwy kolumna , które są określone w klauzula ORDER odnoszą się do tej listyalias kolumna. Typy dużą wartość (varchar(max), nvarchar(max), varbinary(max), i xml) i typami dużych obiektów (LOB) (text, ntext, i image) kolumny nie można określić.
SINGLE_BLOB
Zwraca zawartość data_file jako pojedynczego wiersza jedno -kolumna zestaw wierszy typu varbinary(max).Ważne: Zaleca się, aby importowanie danych XML tylko za pomocą opcji SINGLE_BLOB zamiast SINGLE_CLOB i SINGLE_NCLOB, ponieważ wszystkie okna kodowania konwersje obsługuje tylko SINGLE_BLOB.
SINGLE_CLOB
Czytając data_file w formacie ASCII, zwraca zawartość jako pojedynczego wiersza jedno -kolumna zestaw wierszy typu varchar(max), za pomocą sortowanie bieżącej bazy danych.SINGLE_NCLOB
Czytając data_file jako UNICODE, zwraca zawartość jako pojedynczego wiersza jedno -kolumna zestaw wierszy typu nvarchar(max), za pomocą sortowanie bieżącej bazy danych.
Uwagi
OPENROWSET umożliwia dostęp do dane zdalne danych OLE DB źródeł tylko wtedy, gdy DisallowAdhocAccess opcja rejestru jest jawnie zestaw na wartość 0 dla określonego dostawcai Ad Hoc Distributed Queries jest włączona opcja konfiguracja zaawansowana.Jeśli te opcje nie są zestaw, domyślne zachowanie nie zezwala na dostęp ad hoc.
Podczas uzyskiwania dostępu do zdalnych źródeł danych OLE DB , tożsamość logowania zaufanego połączenia nie jest automatycznie delegowane z serwera, na którym klient jest podłączony do serwera, którego dotyczy kwerenda.Delegowanie uwierzytelniania musi być skonfigurowany.Aby uzyskać więcej informacji, zobacz Konfigurowanie serwerów połączonych w kwestii delegowania.
Nazwy katalogu i schematu są wymagane, jeżelidostawca OLE DBobsługuje wiele katalogów i schematy w określonych danych źródło. Wartości catalog i schema można pominąć, jeśli OLE DB dostawca nie obsługuje je.Jeśli dostawca obsługuje tylko schematu nazwiska, nazwy dwóch części formularza schema**.object musi być określony.Jeśli dostawca obsługuje tylko wykazu nazw, nazwę trzech części formularza, catalog.schema.**object musi być określony.Nazwy trzech części musi być określona dla kwerendy przekazujące, z których korzystać SQL Server macierzystego klienta OLE DB dostawca.Aby uzyskać więcej informacji, zobacz Konwencje składni języka Transact-SQL (Transact-SQL).
OPENROWSET nie akceptuje zmiennych jej argumentów.
Za pomocą OPENROWSET z opcją luzem
Następujące Transact-SQL ulepszenia obsługi OPENROWSET(BULK...) funkcja:
FROM klauzula używany z wybierz może wywołać OPENROWSET(BULK...) zamiast nazwy tabela z funkcjami pełnego wyboru.
OPENROWSET z opcją luzem wymaga nazwy korelacji, znany także jako zakres zmiennej lub alias, w klauzulaFROM.Można określić kolumnę aliasów.Jeśli listaalias kolumnanie zostanie określona, plik formatu musi mieć nazwy kolumna . Określanie aliasów kolumna zastępuje nazwy kolumna w plik formatu, takie jak:
FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,... n)
SELECT...Z OPENROWSET(BULK...) instrukcja kwerendy danych w pliku bezpośrednio, bez importowania danych do tabela.SELECT...Z OPENROWSET(BULK...) sprawozdań może również wyświetlać listę aliasówkolumna luzem - przy użyciu plik formatu do określenia nazwy kolumna i typów danych.
Za pomocą OPENROWSET(BULK...) jako źródło tabela luzem instrukcja INSERT lub korespondencji seryjnej importuje dane z pliku danych do SQL Server tabela.Aby uzyskać więcej informacji, zobacz Importowanie danych luzem za pomocą ZBIORCZYM WSTAWIANIEM lub OPENROWSET(BULK...).
Użyto opcji OPENROWSET luzem z INSERT instrukcjaluzem klauzula obsługuje podpowiedzi do tabela .Oprócz regularnych tabela wskazówki dotyczące serwerów, takie jak TABLOCK, luzem klauzula może zaakceptować następujące wskazówki specjalistyczne tabela : IGNORE_CONSTRAINTS (tylko ograniczenia klucza OBCEGO i wyboru ignoruje), IGNORE_TRIGGERS, KEEPDEFAULTS i KEEPIDENTITY.Aby uzyskać więcej informacji, zobacz Wskazówki tabel (Transact-SQL).
Aby uzyskać informacje dotyczące używania WSTAW...Wybierz * Zobacz sprawozdania Z OPENROWSET(BULK...) Importowanie i eksportowanie danych luzem.Informacje, kiedy wstawienie wiersza operacje wykonywane przez import zbiorczy są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnych logowanie importu zbiorczego.
Ostrzeżenie
Kiedy używasz OPENROWSET jest zrozumieć jak SQL Server uchwyty personifikacji.Aby uzyskać informacje o kwestiach zabezpieczeń, zobacz Importowanie danych luzem za pomocą ZBIORCZYM WSTAWIANIEM lub OPENROWSET(BULK...).
Importowanie danych SQLBINARY SQLCHAR, SQLNCHAR lub luzem
OPENROWSET(Bulk...) zakłada, że, jeżeli nie określono maksymalną długość danych SQLCHAR, SQLNCHAR lub SQLBINARY nie przekracza 8000 bajtów.Jeśli importowane dane dane LOB pole , które zawiera dowolne varchar(max), nvarchar(max), lub varbinary(max) obiektów, które przekraczają 8000 bajtów, należy użyć XML plik formatu , który określa maksymalną długość danych pole.Aby określić maksymalną długość, Edytuj plik formatu i zadeklarować MAX_LENGTH atrybut.Aby uzyskać więcej informacji, zobacz Składnia schematu dla plików w formacie XML.
Ostrzeżenie
Automatycznie wygenerowany plik formatu nie określa długość lub maksymalna długość LOB pole.Można jednak edytować plik formatu i ręcznie określić długość lub maksymalną długość.
Eksportowanie luzem lub importowanie dokumentów SQLXML
eksport zbiorczy lub importu danych SQLXML użyj jednej z następujących typów danych w plik formatu.
Typ danych |
Efekt |
---|---|
SQLCHAR lub SQLVARYCHAR |
Dane są przesyłane klient strona kodowa lub w strona kodowa implikowane przez sortowanie). |
SQLNCHAR lub SQLNVARCHAR |
Dane są przesyłane w formacie Unicode. |
SQLBINARY lub SQLVARYBIN |
Dane są przesyłane bez żadnej konwersji. |
Uprawnienia
OPENROWSET uprawnienia są określane za pomocą uprawnień do nazwy użytkownika, przekazanego dodostawcaOLE DB. Aby użyć opcji luzem wymaga uprawnienia ADMINISTROWANIA operacje zbiorcze.
Przykłady
A.Przy użyciu OPENROWSET SELECT i SQL Server Native Client OLE DB Provider
W poniższym przykładzie użyto SQL Server macierzystym klienta OLE DB dostawca dostępu do HumanResources.Department tabela w AdventureWorks2008R2 bazy danych na serwerze zdalnym Seattle1.(Użyj SQLNCLI i SQL Server nastąpi przekierowanie do najnowszej wersja programu SQL Server macierzystego klienta OLE DB Provider.) A SELECT instrukcja jest używany do definiowania wiersza zestaw zwrócone.dostawcaciąg zawiera Server i Trusted_Connection słowa kluczowe. Te słowa kluczowe są rozpoznawane przez SQL Server macierzystego klienta OLE DB dostawca.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2008R2.HumanResources.Department
ORDER BY GroupName, Name') AS a;
B.Za pomocą dostawcy Microsoft OLE DB dla aparatu Jet
Poniższy przykład uzyskuje dostęp do Customers tabela w Microsoft dostępu Northwind bazy danych za pomocą Microsoft OLE DB Provider for Jet.
Ostrzeżenie
W przykładzie założono, że zainstalowany jest program Access.Aby uruchomić ten przykład, należy zainstalować Northwind bazy danych.Aby uzyskać informacje dotyczące sposobu instalowania Northwind bazy danych, zobacz Pobieranie Northwind i pubs przykładowe bazy danych.
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers);
GO
C.Za pomocą OPENROWSET i innej tabela w operacji INNER JOIN
Poniższy przykład powoduje zaznaczenie wszystkich danych z Customers tabela z lokalnego wystąpienie programu SQL Server Northwind bazy danych i z Orders tabela z dostępu Northwind bazy danych przechowywanych na tym samym komputerze.
Ostrzeżenie
W przykładzie założono, że zainstalowany jest program Access.Aby uruchomić ten przykład, należy zainstalować Northwind bazy danych.Aby uzyskać informacje dotyczące sposobu instalowania Northwind bazy danych, zobacz Pobieranie Northwind i pubs przykładowe bazy danych.
USE Northwind ;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)
AS o
ON c.CustomerID = o.CustomerID ;
GO
D.Za pomocą OPENROWSET luzem Wstaw plik danych w kolumnavarbinary(max)
Poniższy przykład tworzy małą tabela demonstracyjny i wstawia pliku danych z pliku o nazwie Text1.txt znajduje się w C: katalogu głównego do varbinary(max) kolumna.
USE AdventureWorks2008R2;
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max));
GO
INSERT INTO myTable(FileName, FileType, Document)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
* FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;
GO
E.Aby wiersze pobrać z pliku tekstowego przy użyciu luzem OPENROWSET dostawca z plik formatu
W poniższym przykładzie użyto plik formatu , aby pobrać wiersze z pliku tekstowego rozdzielanego tabulatorami values.txt zawiera następujące dane:
1 Data Item 1
2 Data Item 2
3 Data Item 3
plik formatu values.fmt, w tym artykule opisano kolumny w values.txt:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
To jest kwerenda, która pobiera dane:
SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',
FORMATFILE = 'c:\test\values.fmt') AS a;
Dodatkowe przykłady
Dodatkowe przykłady pokazujące przy użyciu WSTAW...Wybierz * Z OPENROWSET(BULK...), zobacz następujące tematy:
Przykłady luzem, importowanie i eksportowanie dokumentów XML
Przechowywanie wartości tożsamości podczas zbiorczego, importowanie danych
Przechowywanie wartości null lub przy użyciu wartości domyślnych podczas importu zbiorczego
Do importowania lub eksportowania danych przy użyciu formatu znaków
Przy użyciu formatu pliku do mapowania pól z pliku danych kolumny tabeli
Zobacz także