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
KIVÁLASZT... Az INTO létrehoz egy új táblát az alapértelmezett fájlcsoportban, és beszúrja a lekérdezésből származó sorokat. A teljes SELECT szintaxis megtekintéséhez lásd: SELECT (Transact-SQL).
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 oszlop IDENTITY tulajdonsága át lesz adva, kivéve a Megjegyzések szakaszban az "Identitásoszlopok használata" című szakaszban meghatározott feltételeket.
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 feltöltheti new_table egy távoli adatforrásból. 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 a SELECT utasítás FROM záradékában. Másik lehetőségként használhatja az OPENQUERY függvényt vagy a FROM záradék OPENDATASOURCE függvényét a távoli adatforrás megadásához.
Fájlcsoport
Megadja annak a fájlcsoportnak a nevét, amelyben az új tábla létrejön. A megadott fájlcsoportnak az adatbázison kell lennie, különben az SQL Server-motor hibát jelez.
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 rendszer a 7119-et állítva leállítja az utasítást.
Ha egy meglévő identitásoszlopot jelöl ki egy új táblába, az új oszlop örökli az IDENTITY tulajdonságot, kivéve, ha az alábbi feltételek egyike teljesül:
A SELECT utasítás egy összekapcsolást tartalmaz.
Több SELECT utasítás van összekapcsolva a UNION segítségével.
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 nem az IDENTITY tulajdonság öröklése, hanem a NOT NULL érték jön létre. Ha egy identitásoszlopra van szükség az új táblában, de ez az oszlop nem érhető el, vagy olyan kezdő vagy növekményes értéket szeretne, amely eltér a forrás identitásoszloptól, adja meg az oszlopot a kiválasztási listában az IDENTITY függvénnyel. Lásd az alábbi Példák szakaszban található "Identitásoszlop létrehozása az IDENTITY függvény használatával" című szakaszt.
Remarks
Az SELECT...INTO utasítás két részből áll : az új tábla jön létre, majd sorokat szúr be. Ez azt jelenti, hogy ha a beszúrások sikertelenek, az összes vissza lesz állítva, 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 és korlátozások
Új táblaként nem adhat meg táblaváltozót vagy táblaértékkel rendelkező paramétert.
Particionált tábla létrehozása akkor sem használható SELECT...INTO , 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 triggerek nem kerülnek át az új táblába, és nem is adhatók meg az SELECT...INTO utasításban. Ha ezekre az objektumokra szükség van, 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 vannak beszúrva.
Ha egy ritka oszlop szerepel a kijelölési listában, a ritka oszlop tulajdonság nem kerül át az új tábla oszlopába. Ha ez a tulajdonság szükséges az új táblában, módosítsa az oszlopdefiníciót a SELECT végrehajtása után... INTO utasítás, amely tartalmazza ezt a tulajdonságot.
Ha egy számított oszlop szerepel a kiválasztási listában, 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ózási viselkedés
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 használata hatékonyabb lehet, mint egy tábla létrehozása, majd a táblázat BESZÚRÁS utasítással való feltöltése. További információ: A tranzakciónapló (SQL Server).
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ásban SELECT...INTO használt felhasználó által definiált függvények nem hajtanak végre adatelérési műveleteket, megadhatja a felhasználó által definiált függvényekhez tartozó SCHEMABINDING záradékot, amely a felhasználó által definiált függvények származtatott UserDataAccess tulajdonságát 0 értékre állítja. 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, amelynek ez a tulajdonsága 1, a művelet teljes naplózása történik.
Permissions
CREATE TABLE engedélyt igényel az adatbázisban, és alter engedélyt arra a sémára, amelyben a tábla létre van hozva.
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
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. 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 TELJES-re van állítva. A minimális naplózás érdekében az AdventureWorks2025 adatbázis helyreállítási modellje úgy van beállítva, hogy BULK_LOGGED a sorok behelyezése előtt, majd a SELECT után FULL visszaállításra állítják... KIJELENTÉS. Ez a folyamat biztosítja, hogy a SELECT... Az INTO utasítás minimális helyet használ a tranzakciónaplóban, és hatékonyan teljesít.
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. Identitásoszlop létrehozása az IDENTITY függvénnyel
A következő példa az IDENTITY függvényt használja az identitásoszlop létrehozására az új táblázatban Person.USAddress az AdventureWorks2025 adatbázisban. Erre azért van szükség, mert a táblát meghatározó SELECT utasítás tartalmaz egy illesztést, ami miatt az IDENTITY tulajdonság nem kerül át az új táblába. Figyelje meg, hogy az IDENTITY függvényben megadott mag- és növekményértékek eltérnek a AddressID forrástábla Person.Addressoszlopátó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 első SELECT FROM záradékában... INTO utasításban és a második SELECT OPENQUERY függvényében... INTO utasítás. A harmadik SELECT... Az INTO utasítás az OPENDATASOURCE függvényt használja, amely a távoli adatforrást adja meg közvetlenül a csatolt kiszolgáló neve helyett.
A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók.
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. Importálás a PolyBase használatával létrehozott külső táblából
Adatok importálása a Hadoopból vagy az Azure Storage-ból az SQL Serverbe állandó tárolás céljából. Külső SELECT INTO tábla által hivatkozott adatok importálása az SQL Server állandó tárolóihoz. Hozzon létre egy relációs táblát menet közben, majd hozzon létre egy oszloptároló indexet a tábla tetején egy második lépésben.
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. 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;
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];
Lásd még:
VÁLASZT (Transact-SQL)
SELECT-példák (Transact-SQL)
BEHELYEZKEDÉS (Transact-SQL)
IDENTITY (Függvény) (Transact-SQL)