Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Az SELECT...INTO utasítás létrehoz egy új táblát az alapértelmezett fájlcsoportban, és beszúrja az eredményül kapott sorokat a lekérdezésből. A teljes SELECT szintaxisért lásd: SELECT.
Transact-SQL szintaxis konvenciók
Syntax
[ INTO new_table ]
[ ON filegroup ]
Arguments
new_table
Megadja a létrehozandó új tábla nevét a kiválasztási lista oszlopai és az adatforrásból kiválasztott sorok alapján.
A new_table formátumát a kiválasztási listában szereplő kifejezések kiértékelésével határozzuk meg. A new_table oszlopai a kiválasztási lista által megadott sorrendben jönnek létre. A new_table minden oszlopa ugyanazzal a névvel, adattípussal, nullbilitással és értékkel rendelkezik, mint a kijelölési listában szereplő megfelelő kifejezés. Az IDENTITY oszlop tulajdonsága a Megjegyzések szakaszban az "Identitásoszlopok használata" című szakaszban meghatározott feltételek kivételével kerül átadásra.
Ha egy másik adatbázisban szeretné létrehozni a táblát az SQL Server ugyanazon példányán, adja meg new_table teljes névként az űrlap database.schema.table_name.
Távoli kiszolgálón nem hozhat létre new_table . Azonban egy távoli adatforrásból is feltöltheti new_table. Ha távoli forrástáblából szeretne new_table létrehozni, adja meg a forrástáblát egy négyrészes névvel az űrlap linked_server. katalógusban. séma. objektumot az FROM utasítás záradékában SELECT . Másik lehetőségként használhatja az OPENQUERY függvényt vagy a záradékBAN szereplőFROM OPENDATASOURCE függvényt a távoli adatforrás megadásához.
Fájlcsoport
Megadja annak a fájlcsoportnak a nevét, amelyben az új táblát létre szeretné hozni. A fájlcsoportnak léteznie kell az adatbázisban, vagy az SQL Server-motor hibát ad vissza.
A következőkre vonatkozik: SQL Server 2016 (13.x) SP2 és újabb.
Adattípusok
A FILESTREAM attribútum nem kerül át az új táblába. A FILESTREAM BLOB-ok az új táblában varbinary(max) BLOB-ként vannak átmásolva és tárolva. A FILESTREAM attribútum nélkül a varbinary(max) adattípus 2 GB-os korlátozással rendelkezik. Ha egy FILESTREAM BLOB túllépi ezt az értéket, a 7119-s hiba jelenik meg, és az utasítás leáll.
Ha egy meglévő identitásoszlopot jelöl ki egy új táblába, az új oszlop örökli a IDENTITY tulajdonságot, kivéve, ha az alábbi feltételek egyike teljesül:
- Az
SELECTutasítás egy illesztőt tartalmaz. - A rendszer több
SELECTutasítást is összekapcsol a használatávalUNION. - Az identitásoszlop többször szerepel a kiválasztási listában.
- Az identitásoszlop egy kifejezés része.
- Az identitásoszlop egy távoli adatforrásból származik.
Ha a feltételek bármelyike igaz, az oszlop a tulajdonság öröklése IDENTITY helyett jön létreNOT NULL. Ha az új táblában identitásoszlopra van szükség, de ez az oszlop nem érhető el, vagy a forrás identitásoszloptól eltérő mag- vagy növekményértéket szeretne, a függvény használatával definiálja az oszlopot a IDENTITY kijelölési listában. Lásd: "Identitásoszlop létrehozása a IDENTITY függvény használatával" című témakör a Példák szakaszban.
Remarks
Az SELECT...INTO utasítás két részből áll: létrejön az új tábla, majd sorokat szúr be. Ez a kétlépéses folyamat azt jelenti, hogy ha a beszúrások sikertelenek, a művelet visszaállítja az összes beszúrást, de az új (üres) tábla megmarad. Ha a teljes művelet sikeres vagy sikertelen, használjon explicit tranzakciót.
A Microsoft Fabric raktára nem támogatja a fájlcsoportokat. A cikkben a fájlcsoportokra mutató hivatkozások és példák nem vonatkoznak a Microsoft Fabric raktárára.
Korlátozások
Új táblaként nem adhat meg táblaváltozót vagy táblaértékkel rendelkező paramétert.
SELECT...INTO Particionált tábla nem hozható létre, még akkor sem, ha a forrástábla particionálása történik.
SELECT...INTO nem használja a forrástábla partíciós sémáját. Ehelyett az új tábla az alapértelmezett fájlcsoportban jön létre. Ha sorokat szeretne beszúrni egy particionált táblába, először létre kell hoznia a particionált táblát, majd az utasítást INSERT INTO...SELECT...FROM kell használnia.
A forrástáblában definiált indexek, korlátozások és eseményindítók nem kerülnek át az új táblába, és az utasításban SELECT...INTO sem adhatók meg. Ha szüksége van ezekre az objektumokra, az utasítás végrehajtása után létrehozhatja őket SELECT...INTO .
A záradék megadása ORDER BY nem garantálja, hogy a sorok a megadott sorrendbe kerülnek.
Ha egy ritka oszlopot is felvesz a kijelölési listába, a ritka oszlop tulajdonság nem lesz átkerül az új tábla oszlopába. Ha szüksége van erre a tulajdonságra az új táblában, módosítsa az oszlopdefiníciót az utasítás végrehajtása után, hogy belefoglalja ezt a SELECT...INTO tulajdonságot.
Ha egy számított oszlopot is felvesz a kijelölési listába, az új tábla megfelelő oszlopa nem számított oszlop. Az új oszlop értékei azok az értékek, amelyeket a végrehajtáskor SELECT...INTO számítottak ki.
Napló viselkedése
A naplózás SELECT...INTO mennyisége az adatbázisra érvényes helyreállítási modelltől függ. Az egyszerű helyreállítási modell vagy a tömegesen naplózott helyreállítási modell alatt a rendszer minimálisan naplózza a tömeges műveleteket. Minimális naplózás esetén az SELECT...INTO utasítás hatékonyabb lehet, mint egy tábla létrehozása, majd a táblázat feltöltése utasítással INSERT . További információkért tekintse meg a tranzakciónaplóról szóló cikket.
SELECT...INTO a felhasználó által definiált függvényeket (UDF-eket) tartalmazó utasítások teljes mértékben naplózott műveletek. Ha az utasítás által használt felhasználó által SELECT...INTO megadott függvények nem hajtanak végre adathozzáférési műveleteket, megadhatja a SCHEMABINDING felhasználó által definiált függvények záradékát. Ez a záradék a felhasználó által definiált függvények származtatott UserDataAccess tulajdonságát állítja be .0 A módosítás után a SELECT...INTO rendszer minimálisan naplózza az utasításokat. Ha az SELECT...INTO utasítás továbbra is hivatkozik legalább egy felhasználó által definiált függvényre 1, amelynek ez a tulajdonsága be van állítva, a művelet teljes mértékben naplózva lesz.
Permissions
CREATE TABLE engedélyt igényel az adatbázisban, és ALTER engedélyt arra a sémára, amelyben a tábla létrejön.
Examples
A. Tábla létrehozása több forrásból származó oszlopok megadásával
Az alábbi példa a táblázatot hozza dbo.EmployeeAddresses létre az AdventureWorks2025 adatbázisban azáltal, hogy hét oszlopot választ ki különböző alkalmazottakhoz és címekhez kapcsolódó táblákból.
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
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS bea
ON e.BusinessEntityID = bea.BusinessEntityID
INNER JOIN Person.Address AS a
ON bea.AddressID = a.AddressID
INNER JOIN Person.StateProvince AS sp
ON sp.StateProvinceID = a.StateProvinceID;
B. Sorok beszúrása minimális naplózással
Az alábbi példa létrehozza a táblát dbo.NewProducts , és sorokat szúr be a Production.Product táblából. A példa feltételezi, hogy az AdventureWorks2025 adatbázis helyreállítási modellje a következőre FULLvan állítva: . A minimális naplózás biztosítása érdekében az AdventureWorks2025-adatbázis helyreállítási modellje a sorok beszúrása előtt be van állítva BULK_LOGGED , és visszaállítja FULL azt az SELECT...INTO utasítás utánra. Ez a folyamat biztosítja, hogy az SELECT...INTO utasítás minimális helyet használ a tranzakciónaplóban, és hatékonyan teljesítsen.
ALTER DATABASE AdventureWorks2025
SET RECOVERY BULK_LOGGED;
GO
SELECT *
INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;
GO
C. Identitásoszlop létrehozása az identitásfüggvény használatával
Az alábbi példa a IDENTITY függvény használatával hoz létre egy identitásoszlopot az AdventureWorks2025 adatbázis új táblájában Person.USAddress . Erre a lépésre azért van szükség, mert a SELECT táblát meghatározó utasítás tartalmaz egy illesztést, amely megakadályozza, hogy a IDENTITY tulajdonság át legyen adva az új táblába. A függvényben IDENTITY megadott mag- és növekményértékek eltérnek a AddressID forrástábla Person.Addressoszlopának értékeitől.
-- 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. Tábla létrehozása távoli adatforrásból származó oszlopok megadásával
Az alábbi példa három módszert mutat be egy új tábla távoli adatforrásból való létrehozására a helyi kiszolgálón. A példa a távoli adatforrásra mutató hivatkozás létrehozásával kezdődik. A csatolt kiszolgáló neve MyLinkServer, ezután meg lesz adva az FROM első SELECT...INTO utasítás záradékában és a OPENQUERY második SELECT...INTO utasítás függvényében. A harmadik SELECT...INTO utasítás a függvényt OPENDATASOURCE használja, amely közvetlenül a távoli adatforrást adja meg a csatolt kiszolgálónév használata helyett.
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'.
EXECUTE sp_addlinkedserver
@server = N'MyLinkServer',
@srvproduct = N' ',
@provider = N'SQLNCLI',
@datasrc = N'server_name',
@catalog = N'AdventureWorks2025';
USE AdventureWorks2025;
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.AdventureWorks2025.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 AdventureWorks2025.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'
).AdventureWorks2025.HumanResources.Department;
E. Importálás a PolyBase használatával létrehozott külső táblából
Ez a példa adatokat importál a Hadoopból vagy az Azure Storage-ból az SQL Serverbe állandó tárolás céljából. Ezután egy külső tábla által hivatkozott adatok importálására szolgál SELECT INTO az SQL Server állandó tárolásához. Végül létrehoz egy relációs táblát menet közben, majd létrehoz egy oszlopcentrikus indexet a táblán.
A következőkre vonatkozik: 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. Az adatok másolása egyik táblából a másikba, és az új tábla létrehozása egy megadott fájlcsoporton
Az alábbi példa bemutatja, hogyan hozhat létre egy új táblát egy másik tábla másolataként, és betölti azt a felhasználó alapértelmezett fájlcsoportjától eltérő fájlcsoportba.
A következőkre vonatkozik: SQL Server 2016 (13.x) SP2 és újabb.
ALTER DATABASE [AdventureWorksDW2022]
ADD FILEGROUP FG2;
GO
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];