Udostępnij za pośrednictwem


W klauzuli (Transact-SQL)

SELECT...DO tworzy nową tabela w domyślnej grupa plików i wstawia wiersze wynikowe z kwerendy do niej.Aby wyświetlić pełną składnię SELECT, zobacz SELECT (Transact-SQL).

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

[ INTO new_table ]

Argumenty

  • new_table
    Określa nazwę nowej tabela ma zostać utworzona, na podstawie kolumn na liście select i wierszy w danych źródło.

    Format new_table ustala się poprzez ocenę wyrażenia na liście select.Kolumny w new_table są tworzone w kolejności określonej przez Wybieranie listy.Każda kolumna w new_table ma tę samą nazwę, typ danych, opcje dopuszczania wartości nulli wartość jako odpowiednie wyrażenie na liście select.Identyfikacja właściwość kolumna jest przenoszona z wyjątkiem zgodnie z warunkami określonymi w "Praca z kolumny identyfikacji" w sekcji Uwagi.

    Tworzenie tabela w innej bazie danych na tym samym wystąpienie programu SQL Server, określ new_table jako w pełni kwalifikowana nazwa w formie database.schema.table_name.

    Nie można utworzyć new_table na serwerze zdalnym. Jednakże można wypełniać new_table z dane zdalne źródło.Aby utworzyć new_table z zdalnego źródło tabelaokreślić źródło tabela za pomocą czteroczęściowym nazwę w postaci linked_server.catalog.schema.obiektu w klauzula FROM instrukcjaSELECT.Alternatywnie można skorzystać z OTWÓRZKWERENDĘ funkcja lub OPENDATASOURCE funkcja w klauzula FROM określania dane zdalne źródło.

Typy danych

FILESTREAM atrybut nie są transferowane do nowej tabela.Liczba bloków BLOB FILESTREAM są kopiowane i przechowywane w nowej tabela jako varbinary(max) bloków BLOB.Bez FILESTREAM atrybut varbinary(max) Typ danych ma ograniczenie z 2 GB.Jeśli FILESTREAM BLOB przekracza tę wartość, spowodował błąd 7119 i instrukcja jest zatrzymana.

Po wybraniu istniejącej kolumna tożsamości do nowej tabelanowa kolumna dziedziczy tożsamości, właściwość, chyba że jest spełniony jeden z następujących warunków:

  • instrukcja SELECT zawiera łączyć, Grupuj według klauzulalubfunkcja wartość zagregowana.

  • Wiele instrukcji SELECT są sprzężone przy użyciu Unii.

  • Tożsamości kolumna jest wyświetlana więcej niż jeden czas na liście Wybierz.

  • kolumna tożsamości jest częścią wyrażenie.

  • kolumna tożsamości jest z dane zdalneźródło.

Jeśli którykolwiek z tych warunków jest spełniony, kolumna jest tworzona NOT NULL zamiast dziedziczenie właściwośćtożsamości.Jeśli kolumna jest wymagana w nowej tabela , ale takiej kolumna nie jest dostępna lub ma materiału siewnego lub zwiększać wartość inną niż tożsamość źródło kolumna, należy zdefiniować kolumna na liście wybierz przy użyciu tożsamości funkcja.Zobacz "Tworzenie kolumna przy użyciu tożsamości funkcja w poniższej sekcji przykładami.

Ograniczenia i ograniczenia

Nie można określić w tabelalub zmiennej tabela -parametr wyceniane jako nowej tabela.

Nie można używać SELECT...INTO utworzyć tabela partycjonowananawet wtedy, gdytabela źródłojest podzielony na partycje. WYBIERZ...DO nie używa schemat partycji źródło tabela; Zamiast tego nowa tabela jest tworzony w domyślnej grupa plików.Aby wstawić wiersze do tabela partycjonowana, należy najpierw utworzyć tabela partycjonowana , a następnie użyć INSERT INTO...Wybierz z instrukcja.

WYBIERZ...INTO nie można używać z OBLICZYĆ.

Indeksy, ograniczenia i wyzwalaczy zdefiniowane wtabela źródłonie są transferowane do nowej tabela, ani nie może być określony w polu Wybierz...W instrukcja. Jeśli obiekty te są wymagane, należy je utworzyć po wykonaniu SELECT...W instrukcja.

Określanie kolejności klauzula nie gwarantuje, że wiersze są wstawiane w podanej kolejności.

Gdy sparse kolumna jest uwzględniona na liście select, sparse kolumna właściwość nie są transferowane do kolumna w nowej tabela.Jeśli ta właściwość jest wymagany w nowej tabela, zmienić definicji kolumna po wykonaniu SELECT...W instrukcja Dołącz tę właściwość.

Gdy obliczanej kolumna znajduje się na liście select, odpowiedniej kolumna w nowej tabela nie jest kolumnaobliczanej.Wartości w nowej kolumna są wartościami, które zostały obliczone w czas SELECT...INTO zostało wykonane.

Sposób rejestrowania

Kwota rejestrowania SELECT...DO zależy od modelu odzyskiwanie dotyczące bazy danych.W modelu odzyskiwanie proste lub model odzyskiwania z niepełnym dziennikiem, operacje zbiorcze minimalny są rejestrowane.Z minimalnym rejestrowanie, SELECT... DO instrukcja mogą być bardziej efektywne niż tworzenie tabela i wypełnianie tabela z INSERT instrukcja.Aby uzyskać więcej informacji, zobacz Operacje, które mogą być rejestrowane minimalny.

Uprawnienia

Wymaga uprawnienia CREATE TABLE w obiekt docelowy bazie danych.

Przykłady

A.Tworzenie tabela przez określenie kolumny z wielu źródeł

Poniższy przykład tworzy tabela dbo.EmployeeAddresses , wybierając siedem kolumn z różnych powiązane pracownika i adres tabel.

USE AdventureWorks2008R2;
GO
SELECT c.FirstName, c.LastName, e.JobTitle, a.AddressLine1, a.City, 
    sp.Name AS [State/Province], a.PostalCode
INTO dbo.EmployeeAddresses
FROM Person.Person AS c
    JOIN HumanResources.Employee AS e 
    ON e.BusinessEntityID = c.BusinessEntityID
    JOIN Person.BusinessEntityAddress AS bea
    ON e.BusinessEntityID = bea.BusinessEntityID
    JOIN Person.Address AS a
    ON bea.AddressID = a.AddressID
    JOIN Person.StateProvince as sp 
    ON sp.StateProvinceID = a.StateProvinceID;
GO

B.Wstawianie wierszy przy użyciu minimalnej rejestrowania

Poniższy przykład tworzy tabela dbo.NewProducts i wstawia wiersze z Production.Product tabela.W przykładzie założono, że model odzyskiwanie AdventureWorks2008R2 bazy danych jest zestaw na pełnej.Aby zapewnić minimalny rejestrowanie jest używany, modelu odzyskiwanie z AdventureWorks2008R2 bazy danych jest zestaw na BULK_LOGGED przed wiersze są wstawiane i zresetować PEŁNEGO po wybierz...W instrukcja.Dzięki niemu SELECT...W instrukcja używa minimalne miejsca w dzienniku transakcji i wykonuje efektywnie.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.NewProducts', 'U') IS NOT NULL
    DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks2008R2 SET RECOVERY BULK_LOGGED;
GO

SELECT * INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25 
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL;
GO

C.Tworzenie kolumna przy użyciu tożsamości, funkcja

W poniższym przykładzie użyto do utworzenia nowej tabela kolumna tożsamości funkcjaPerson.USAddress. Jest to wymagane, ponieważ SELECT instrukcja , która definiuje tabela zawiera łączyć, która powoduje, że tożsamość właściwość nie przenieść do nowej tabela.Należy zauważyć, że wartości początkowej i wartości przyrostu określonej w funkcja tożsamości są różne od tych AddressIDkolumna wtabela źródło Person.Address.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('Person.USAddress') IS NOT NULL
DROP TABLE Person.USAddress;
GO
-- Determine the IDENTITY status of the source column AddressID.
SELECT OBJECT_NAME(object_id) AS TableName, name AS column_name, is_identity, seed_value, increment_value
FROM sys.identity_columns
WHERE name = 'AddressID';

-- Create a new table with columns from the existing table Person.Address. A new IDENTITY
-- column is created by using the IDENTITY function.
SELECT IDENTITY (int, 100, 5) AS AddressID, 
       a.AddressLine1, a.City, b.Name AS State, a.PostalCode
INTO Person.USAddress 
FROM Person.Address AS a
INNER JOIN Person.StateProvince AS b ON a.StateProvinceID = b.StateProvinceID
WHERE b.CountryRegionCode = N'US'; 

-- Verify the IDENTITY status of the AddressID columns in both tables.
SELECT OBJECT_NAME(object_id) AS TableName, name AS column_name, is_identity, seed_value, increment_value
FROM sys.identity_columns
WHERE name = 'AddressID';

D.Tworzenie tabela przez określenie kolumn zeźródło dane zdalne

Poniższy przykład ilustruje trzy metody tworzenia nowej tabela na serwerze lokalnym z dane zdalne źródło.Przykład rozpoczyna się przez utworzenie łącza do dane zdalne źródło.Nazwa serwer połączony MyLinkServer, następnie jest określona w FROM klauzula zaznacz pierwszy...W instrukcja i OTWÓRZKWERENDĘ funkcja zaznacz drugi...W instrukcja.Wybierz trzeci...W instrukcja używa funkcjaOPENDATASOURCE, która określaźródło dane zdalnebezpośrednio, zamiast przy użyciu nazwy serwer połączony .

USE master;
GO
-- Create a link to the remote data source. 
-- Specify a valid server name for @datasrc as 'server_name' or 'server_name\instance_name'.
EXEC sp_addlinkedserver @server = N'MyLinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'server_name',
    @catalog = N'AdventureWorks2008R2';
GO
USE AdventureWorks2008R2;
GO
-- Specify the remote data source in the FROM clause using a four-part name 
-- in the form linked_server.catalog.schema.object.
SELECT *
INTO dbo.Departments
FROM MyLinkServer.AdventureWorks2008R2.HumanResources.Department
GO
-- Use the OPENQUERY function to access the remote data source.
SELECT *
INTO dbo.DepartmentsUsingOpenQuery
FROM OPENQUERY(MyLinkServer, 'SELECT *
               FROM AdventureWorks2008R2.HumanResources.Department'); 
GO
-- Use the OPENDATASOURCE function to specify the remote data source.
-- Specify a valid server name for Data Source using the format server_name or server_name\instance_name.
SELECT *
INTO dbo.DepartmentsUsingOpenDataSource
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=server_name;Integrated Security=SSPI')
    .AdventureWorks2008R2.HumanResources.Department;
GO