Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
SELECTEREN... INTO maakt een nieuwe tabel in de standaardbestandsgroep en voegt de resulterende rijen uit de query erin in. Zie SELECT (Transact-SQL)om de volledige SELECT-syntaxis weer te geven.
              
              
              Transact-SQL syntaxis-conventies
Syntax
[ INTO new_table ]
[ ON filegroup ]
Arguments
              new_table
Hiermee geeft u de naam op van een nieuwe tabel die moet worden gemaakt, op basis van de kolommen in de selectielijst en de rijen die zijn gekozen uit de gegevensbron.
De indeling van new_table wordt bepaald door de expressies in de selectielijst te evalueren. De kolommen in new_table worden gemaakt in de volgorde die is opgegeven door de selectielijst. Elke kolom in new_table heeft dezelfde naam, hetzelfde gegevenstype, de null-waarde en de bijbehorende expressie in de selectielijst. De eigenschap IDENTITY van een kolom wordt overgedragen, behalve onder de voorwaarden die zijn gedefinieerd in 'Werken met identiteitskolommen' in de sectie Opmerkingen.
Als u de tabel in een andere database op hetzelfde exemplaar van SQL Server wilt maken, geeft u new_table op als een volledig gekwalificeerde naam in het formulier database.schema.table_name.
U kunt geen new_table maken op een externe server; U kunt echter new_table vullen vanuit een externe gegevensbron. Als u new_table wilt maken op basis van een externe brontabel, geeft u de brontabel op met een vierdelige naam in het formulier linked_server. catalogus. schema. object in de FROM-component van de SELECT-instructie. U kunt ook de functie OPENQUERY of de functie OPENDATASOURCE in de FROM-component gebruiken om de externe gegevensbron op te geven.
              filegroup
Hiermee geeft u de naam van de bestandsgroep waarin nieuwe tabel wordt gemaakt. De opgegeven bestandsgroep moet aanwezig zijn in de database, anders genereert de SQL Server-engine een fout.
Van toepassing op: SQL Server 2016 (13.x) SP2 en hoger.
Data Types
Het kenmerk FILESTREAM wordt niet overgedragen naar de nieuwe tabel. FILESTREAM-BLObs worden gekopieerd en opgeslagen in de nieuwe tabel als varbinary(max) BLOBs. Zonder het kenmerk FILESTREAM heeft het gegevenstype varbinary(max) een beperking van 2 GB. Als een FILESTREAM-BLOB deze waarde overschrijdt, wordt fout 7119 gegenereerd en wordt de instructie gestopt.
Wanneer een bestaande identiteitskolom is geselecteerd in een nieuwe tabel, neemt de nieuwe kolom de eigenschap IDENTITY over, tenzij aan een van de volgende voorwaarden wordt voldaan:
- De SELECT-instructie bevat een join. 
- Meerdere SELECT-instructies worden samengevoegd met behulp van UNION. 
- De identiteitskolom wordt meer dan één keer weergegeven in de selectielijst. 
- De identiteitskolom maakt deel uit van een expressie. 
- De identiteitskolom is afkomstig van een externe gegevensbron. 
Als aan een van deze voorwaarden wordt voldaan, wordt de kolom NOT NULL gemaakt in plaats van de eigenschap IDENTITY over te nemen. Als een identiteitskolom vereist is in de nieuwe tabel, maar een dergelijke kolom niet beschikbaar is, of als u een seed- of increment-waarde wilt die verschilt van de kolom bronidentiteit, definieert u de kolom in de selectielijst met behulp van de functie IDENTITY. Zie 'Een identiteitskolom maken met behulp van de functie IDENTITY' in de sectie Voorbeelden hieronder.
Remarks
De SELECT...INTO instructie werkt in twee delen: de nieuwe tabel wordt gemaakt en vervolgens worden rijen ingevoegd.  Dit betekent dat als de invoegingen mislukken, ze allemaal worden teruggedraaid, maar de nieuwe (lege) tabel blijft bestaan.  Als u de hele bewerking nodig hebt om als geheel te slagen of te mislukken, gebruikt u een expliciete transactie.
Warehouse in Microsoft Fabric biedt geen ondersteuning voor bestandsgroepen. Verwijzingen en voorbeelden in dit artikel voor bestandsgroepen zijn niet van toepassing op Warehouse in Microsoft Fabric.
Beperkingen en beperkingen
U kunt geen tabelvariabele of tabelwaardeparameter opgeven als de nieuwe tabel.
U kunt geen SELECT...INTO gepartitioneerde tabel maken, zelfs niet wanneer de brontabel is gepartitioneerd. 
              SELECT...INTO maakt geen gebruik van het partitieschema van de brontabel; In plaats daarvan wordt de nieuwe tabel gemaakt in de standaardbestandsgroep. Als u rijen wilt invoegen in een gepartitioneerde tabel, moet u eerst de gepartitioneerde tabel maken en vervolgens de INSERT INTO...SELECT...FROM instructie gebruiken.
Indexen, beperkingen en triggers die in de brontabel zijn gedefinieerd, worden niet overgebracht naar de nieuwe tabel en kunnen ook niet worden opgegeven in de SELECT...INTO instructie. Als deze objecten vereist zijn, kunt u deze maken nadat u de SELECT...INTO instructie hebt uitgevoerd.
Het opgeven van een ORDER BY component garandeert niet dat de rijen in de opgegeven volgorde worden ingevoegd.
Wanneer een sparse-kolom wordt opgenomen in de selectielijst, wordt de eigenschap sparse-kolom niet overgedragen naar de kolom in de nieuwe tabel. Als deze eigenschap vereist is in de nieuwe tabel, wijzigt u de kolomdefinitie nadat u SELECT hebt uitgevoerd... INTO-instructie om deze eigenschap op te nemen.
Wanneer een berekende kolom wordt opgenomen in de selectielijst, is de bijbehorende kolom in de nieuwe tabel geen berekende kolom. De waarden in de nieuwe kolom zijn de waarden die zijn berekend op het moment SELECT...INTO dat ze zijn uitgevoerd.
Logging Behavior
De hoeveelheid logboekregistratie SELECT...INTO is afhankelijk van het herstelmodel dat van kracht is voor de database. Onder het eenvoudige herstelmodel of bulksgewijs vastgelegde herstelmodel worden bulkbewerkingen minimaal vastgelegd. Met minimale logboekregistratie kan het gebruik van de SELECT...INTO instructie efficiënter zijn dan het maken van een tabel en vervolgens de tabel vullen met een INSERT-instructie. Zie Het transactielogboek (SQL Server)voor meer informatie.
              SELECT...INTO instructies die door de gebruiker gedefinieerde functies (UDF's) bevatten, zijn volledig vastgelegde bewerkingen. Als de door de gebruiker gedefinieerde functies die worden gebruikt in de SELECT...INTO instructie geen bewerkingen voor gegevenstoegang uitvoeren, kunt u de COMPONENT SCHEMABINDING opgeven voor de door de gebruiker gedefinieerde functies, waarmee de afgeleide eigenschap UserDataAccess voor deze door de gebruiker gedefinieerde functies wordt ingesteld op 0. Na deze wijziging SELECT...INTO worden instructies minimaal geregistreerd. Als de instructie nog steeds verwijst naar ten minste één door de SELECT...INTO gebruiker gedefinieerde functie waarvoor deze eigenschap is ingesteld op 1, wordt de bewerking volledig geregistreerd.
Permissions
Vereist de machtiging CREATE TABLE in de database en ALTER-machtiging voor het schema waarin de tabel wordt gemaakt.
Examples
A. Een tabel maken door kolommen op te geven uit meerdere bronnen
In het volgende voorbeeld wordt de tabel dbo.EmployeeAddresses in de Database AdventureWorks2022 gemaakt door zeven kolommen te selecteren uit verschillende tabellen met betrekking tot werknemers en adressen.
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. Rijen invoegen met minimale logboekregistratie
In het volgende voorbeeld wordt de tabel gemaakt dbo.NewProducts en worden rijen uit de Production.Product tabel ingevoegd. In het voorbeeld wordt ervan uitgegaan dat het herstelmodel van de AdventureWorks2022-database is ingesteld op VOLLEDIG. Om ervoor te zorgen dat minimale logboekregistratie wordt gebruikt, wordt het herstelmodel van de AdventureWorks2022-database ingesteld op BULK_LOGGED voordat rijen worden ingevoegd en opnieuw worden ingesteld op VOLLEDIG na de SELECT... INTO-instructie. Dit proces zorgt ervoor dat de SELECT... INTO-instructie maakt gebruik van minimale ruimte in het transactielogboek en presteert efficiënt.
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. Een identiteitskolom maken met behulp van de functie IDENTITY
In het volgende voorbeeld wordt de functie IDENTITY gebruikt om een identiteitskolom te maken in de nieuwe tabel Person.USAddress in de Database AdventureWorks2022. Dit is vereist omdat de SELECT-instructie waarmee de tabel wordt gedefinieerd een join bevat, waardoor de eigenschap IDENTITY niet wordt overgedragen naar de nieuwe tabel. U ziet dat de seed- en incrementele waarden die zijn opgegeven in de functie IDENTITY verschillen van die van de AddressID kolom in de brontabel Person.Address.
-- 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. Een tabel maken door kolommen op te geven van een externe gegevensbron
In het volgende voorbeeld ziet u drie methoden voor het maken van een nieuwe tabel op de lokale server vanuit een externe gegevensbron. Het voorbeeld begint met het maken van een koppeling naar de externe gegevensbron. De naam van de gekoppelde server wordt MyLinkServer, vervolgens opgegeven in de FROM-component van de eerste SELECT... INTO-instructie en in de functie OPENQUERY van de tweede SELECT... INTO-instructie. De derde SELECT... INTO-instructie maakt gebruik van de functie OPENDATASOURCE, waarmee de externe gegevensbron rechtstreeks wordt opgegeven in plaats van de naam van de gekoppelde server te gebruiken.
Van toepassing op: SQL Server 2008 (10.0.x) en hoger.
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. Importeren uit een externe tabel die is gemaakt met PolyBase
Importeer gegevens uit Hadoop of Azure Storage in SQL Server voor permanente opslag. Hiermee SELECT INTO importeert u gegevens waarnaar wordt verwezen door een externe tabel voor permanente opslag in SQL Server. Maak on-the-fly een relationele tabel en maak vervolgens een kolomarchiefindex boven op de tabel in een tweede stap.
Van toepassing op: 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. De gegevens van de ene tabel naar de andere kopiëren en de nieuwe tabel maken in een opgegeven bestandsgroep
In het volgende voorbeeld ziet u hoe u een nieuwe tabel maakt als een kopie van een andere tabel en deze laadt in een opgegeven bestandsgroep die verschilt van de standaardbestandsgroep van de gebruiker.
Van toepassing op: SQL Server 2016 (13.x) SP2 en hoger.
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];
See Also
              SELECT (Transact-SQL)
              SELECT-voorbeelden (Transact-SQL)
              INSERT (Transact-SQL)
              IDENTITY (functie) (Transact-SQL)