Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
WYBRAĆ... FUNKCJA INTO tworzy nową tabelę w domyślnej grupie plików i wstawia do niej wynikowe wiersze z zapytania. Aby wyświetlić pełną składnię SELECT, zobacz SELECT (Transact-SQL).
Transact-SQL konwencje składni
Syntax
[ INTO new_table ]
[ ON filegroup ]
Arguments
new_table
Określa nazwę nowej tabeli do utworzenia na podstawie kolumn na liście wyboru i wierszy wybranych ze źródła danych.
Format new_table jest określany przez ocenę wyrażeń na liście wyboru. Kolumny w new_table są tworzone w kolejności określonej przez listę wyboru. Każda kolumna w new_table ma taką samą nazwę, typ danych, wartość null, jak odpowiednie wyrażenie na liście wyboru. Właściwość IDENTITY kolumny jest przenoszona z wyjątkiem warunków zdefiniowanych w sekcji "Praca z kolumnami tożsamości".
Aby utworzyć tabelę w innej bazie danych w tym samym wystąpieniu programu SQL Server, określ new_table jako w pełni kwalifikowaną nazwę w formularzu database.schema.table_name.
Nie można utworzyć new_table na serwerze zdalnym; można jednak wypełnić new_table ze zdalnego źródła danych. Aby utworzyć new_table na podstawie zdalnej tabeli źródłowej, określ tabelę źródłową przy użyciu czteroczęściowej nazwy w formularzu linked_server. wykaz. schemat. obiekt w klauzuli FROM instrukcji SELECT. Alternatywnie można użyć funkcji OPENQUERY lub funkcji OPENDATASOURCE w klauzuli FROM, aby określić zdalne źródło danych.
grupa plików
Określa nazwę grupy plików, w której zostanie utworzona nowa tabela. Określona grupa plików powinna istnieć w bazie danych, w przeciwnym razie aparat programu SQL Server zgłasza błąd.
Dotyczy: SQL Server 2016 (13.x) SP2 lub nowszy.
Typy danych
Atrybut FILESTREAM nie jest przenoszony do nowej tabeli. BLOB FILESTREAM są kopiowane i przechowywane w nowej tabeli jako BLOB varbinary(max). Bez atrybutu FILESTREAM typ danych varbinary(max) ma ograniczenie 2 GB. Jeśli obiekt BLOB FILESTREAM przekracza tę wartość, zostanie zgłoszony błąd 7119 i instrukcja zostanie zatrzymana.
Po wybraniu istniejącej kolumny tożsamości do nowej tabeli nowa kolumna dziedziczy właściwość IDENTITY, chyba że spełniony jest jeden z następujących warunków:
Instrukcja SELECT zawiera sprzężenie.
Wiele instrukcji SELECT jest połączonych przy użyciu instrukcji UNION.
Kolumna tożsamości jest wyświetlana więcej niż raz na liście wyboru.
Kolumna tożsamości jest częścią wyrażenia.
Kolumna tożsamości pochodzi ze zdalnego źródła danych.
Jeśli którykolwiek z tych warunków jest spełniony, kolumna nie jest tworzona bez wartości NULL zamiast dziedziczyć właściwość IDENTITY. Jeśli kolumna tożsamości jest wymagana w nowej tabeli, ale taka kolumna jest niedostępna, lub chcesz, aby wartość inicjacji lub przyrostu różniła się od kolumny tożsamości źródłowej, zdefiniuj kolumnę na liście wyboru przy użyciu funkcji IDENTITY. Zobacz sekcję "Tworzenie kolumny tożsamości przy użyciu funkcji IDENTITY" w poniższej sekcji Przykłady.
Remarks
Instrukcja SELECT...INTO działa w dwóch częściach — zostanie utworzona nowa tabela, a następnie wstawione wiersze. Oznacza to, że jeśli wstawianie zakończy się niepowodzeniem, wszystkie zostaną wycofane, ale nowa (pusta) tabela pozostanie. Jeśli potrzebujesz całej operacji, aby zakończyć się powodzeniem lub niepowodzeniem w całości, użyj jawnej transakcji.
Magazyn w usłudze Microsoft Fabric nie obsługuje grup plików. Odwołania i przykłady w tym artykule do grup plików nie mają zastosowania do magazynu w usłudze Microsoft Fabric.
Ograniczenia i ograniczenia
Nie można określić zmiennej tabeli ani parametru o wartości tabeli jako nowej tabeli.
Nie można użyć SELECT...INTO metody do utworzenia tabeli partycjonowanej, nawet jeśli tabela źródłowa jest partycjonowana.
SELECT...INTO nie używa schematu partycji tabeli źródłowej; Zamiast tego nowa tabela jest tworzona w domyślnej grupie plików. Aby wstawić wiersze do tabeli partycjonowanej, musisz najpierw utworzyć tabelę partycjonowaną, a następnie użyć instrukcji INSERT INTO...SELECT...FROM .
Indeksy, ograniczenia i wyzwalacze zdefiniowane w tabeli źródłowej nie są przenoszone do nowej tabeli ani nie można ich określić w instrukcji SELECT...INTO . Jeśli te obiekty są wymagane, można je utworzyć po wykonaniu instrukcji SELECT...INTO .
Określenie klauzuli ORDER BY nie gwarantuje, że wiersze są wstawiane w określonej kolejności.
Gdy kolumna rozrzedzeniu znajduje się na liście zaznaczeń, właściwość kolumny rozrzedzeniu nie jest przenoszona do kolumny w nowej tabeli. Jeśli ta właściwość jest wymagana w nowej tabeli, zmień definicję kolumny po wykonaniu polecenia SELECT... INSTRUKCJA INTO do uwzględnienia tej właściwości.
Gdy kolumna obliczeniowa znajduje się na liście wyboru, odpowiednia kolumna w nowej tabeli nie jest kolumną obliczeniową. Wartości w nowej kolumnie to wartości, które zostały obliczone w czasie SELECT...INTO wykonywania.
Zachowanie logowania
Ilość rejestrowania SELECT...INTO zależy od modelu odzyskiwania obowiązującego dla bazy danych. W ramach prostego modelu odzyskiwania lub modelu odzyskiwania rejestrowanego zbiorczo operacje zbiorcze są minimalnie rejestrowane. W przypadku minimalnego rejestrowania użycie SELECT...INTO instrukcji może być bardziej wydajne niż utworzenie tabeli, a następnie wypełnienie tabeli instrukcją INSERT. Aby uzyskać więcej informacji, zobacz Dziennik transakcji (SQL Server).
SELECT...INTO instrukcje zawierające funkcje zdefiniowane przez użytkownika (UDF) są w pełni rejestrowane operacje. Jeśli funkcje zdefiniowane przez użytkownika, które są używane w SELECT...INTO instrukcji nie wykonują żadnych operacji dostępu do danych, można określić klauzulę SCHEMABINDING dla funkcji zdefiniowanych przez użytkownika, która ustawi pochodną właściwość UserDataAccess dla tych funkcji zdefiniowanych przez użytkownika na 0. Po tej zmianie SELECT...INTO instrukcje zostaną co najmniej zarejestrowane.
SELECT...INTO Jeśli instrukcja nadal odwołuje się do co najmniej jednej funkcji zdefiniowanej przez użytkownika, która ma tę właściwość ustawioną na 1, operacja jest w pełni rejestrowana.
Permissions
Wymaga uprawnienia CREATE TABLE w bazie danych i uprawnienia ALTER w schemacie, w którym jest tworzona tabela.
Examples
A. Tworzenie tabeli przez określanie kolumn z wielu źródeł
Poniższy przykład tworzy tabelę dbo.EmployeeAddresses w bazie danych AdventureWorks2025, wybierając siedem kolumn z różnych tabel związanych z pracownikami i adresami.
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 minimalnego rejestrowania
Poniższy przykład tworzy tabelę dbo.NewProducts i wstawia wiersze z Production.Product tabeli. Przykład zakłada, że model odzyskiwania bazy AdventureWorks2025 jest ustawiony na PEŁNE. Aby zapewnić minimalne logowanie, model odzyskiwania bazy AdventureWorks2025 jest ustawiony tak, aby BULK_LOGGED przed wstawieniem wierszy i resetuje się do FULL po SELECT... Oświadczenie IN. Ten proces gwarantuje, że polecenie SELECT... Instrukcja INTO używa minimalnej ilości miejsca w dzienniku transakcji i działa wydajnie.
ALTER DATABASE AdventureWorks2022 SET RECOVERY BULK_LOGGED;
GO
SELECT * INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL;
GO
C. Tworzenie kolumny tożsamości przy użyciu funkcji IDENTITY
Poniższy przykład wykorzystuje funkcję IDENTITY do utworzenia kolumny tożsamości w nowej tabeli Person.USAddress bazy AdventureWorks2025. Jest to wymagane, ponieważ instrukcja SELECT definiująca tabelę zawiera sprzężenie, co powoduje, że właściwość IDENTITY nie zostanie przeniesiona do nowej tabeli. Zwróć uwagę, że wartości inicjujące i przyrostowe określone w funkcji IDENTITY różnią się od AddressID wartości kolumny w tabeli Person.Addressźródłowej .
-- 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 tabeli przez określenie kolumn z zdalnego źródła danych
W poniższym przykładzie przedstawiono trzy metody tworzenia nowej tabeli na serwerze lokalnym ze zdalnego źródła danych. Przykład rozpoczyna się od utworzenia linku do zdalnego źródła danych. Połączona nazwa MyLinkServer, serwera jest następnie określona w klauzuli FROM pierwszego SELECT... INSTRUKCJA INTO i w funkcji OPENQUERY drugiej funkcji SELECT... INTO, instrukcja. Trzeci wybór... Instrukcja INTO używa funkcji OPENDATASOURCE, która określa zdalne źródło danych bezpośrednio zamiast używać połączonej nazwy serwera.
Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
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'AdventureWorks2022';
GO
USE AdventureWorks2022;
GO
-- Specify the remote data source in the FROM clause using a four-part name
-- in the form linked_server.catalog.schema.object.
SELECT DepartmentID, Name, GroupName, ModifiedDate
INTO dbo.Departments
FROM MyLinkServer.AdventureWorks2022.HumanResources.Department
GO
-- Use the OPENQUERY function to access the remote data source.
SELECT DepartmentID, Name, GroupName, ModifiedDate
INTO dbo.DepartmentsUsingOpenQuery
FROM OPENQUERY(MyLinkServer, 'SELECT *
FROM AdventureWorks2022.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 DepartmentID, Name, GroupName, ModifiedDate
INTO dbo.DepartmentsUsingOpenDataSource
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=server_name;Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Department;
GO
E. Importowanie z tabeli zewnętrznej utworzonej za pomocą technologii PolyBase
Zaimportuj dane z usługi Hadoop lub Azure Storage do programu SQL Server na potrzeby magazynu trwałego. Służy SELECT INTO do importowania danych przywoływalnych przez tabelę zewnętrzną na potrzeby magazynu trwałego w programie SQL Server. Utwórz tabelę relacyjną na bieżąco, a następnie utwórz indeks magazynu kolumn w górnej części tabeli w drugim kroku.
Dotyczy: SQL Server.
-- Import data for car drivers into SQL Server to do more in-depth analysis.
SELECT DISTINCT
Insured_Customers.FirstName, Insured_Customers.LastName,
Insured_Customers.YearlyIncome, Insured_Customers.MaritalStatus
INTO Fast_Customers from Insured_Customers INNER JOIN
(
SELECT * FROM CarSensor_Data where Speed > 35
) AS SensorD
ON Insured_Customers.CustomerKey = SensorD.CustomerKey
ORDER BY YearlyIncome;
F. Kopiowanie danych z jednej tabeli do innej i tworzenie nowej tabeli w określonej grupie plików
W poniższym przykładzie pokazano utworzenie nowej tabeli jako kopii innej tabeli i załadowanie jej do określonej grupy plików innej niż domyślna grupa plików użytkownika.
Dotyczy: SQL Server 2016 (13.x) SP2 lub nowszy.
ALTER DATABASE [AdventureWorksDW2022] ADD FILEGROUP FG2;
ALTER DATABASE [AdventureWorksDW2022]
ADD FILE
(
NAME='FG2_Data',
FILENAME = '/var/opt/mssql/data/AdventureWorksDW2022_Data1.mdf'
)
TO FILEGROUP FG2;
GO
SELECT * INTO [dbo].[FactResellerSalesXL] ON FG2 FROM [dbo].[FactResellerSales];
Zobacz też
WYBIERZ (Transact-SQL)
PRZYKŁADY SELECT (Transact-SQL)
WSTAW (Transact-SQL)
IDENTITY (Funkcja) (Transact-SQL)