Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
deyimi, SELECT...INTO varsayılan dosya grubunda yeni bir tablo oluşturur ve sorgudan elde edilen satırları sorguya ekler. Söz diziminin tamamı SELECT için bkz. SELECT.
Transact-SQL söz dizimi kuralları
Syntax
[ INTO new_table ]
[ ON filegroup ]
Arguments
new_table
Seçim listesindeki sütunlara ve veri kaynağından seçilen satırlara göre oluşturulacak yeni tablonun adını belirtir.
new_table biçimi, seçme listesindeki ifadeler değerlendirilerek belirlenir.
new_table sütunları, seçme listesi tarafından belirtilen sırada oluşturulur.
new_table'daki her sütun, seçme listesindeki karşılık gelen ifadeyle aynı ada, veri türüne, null atanabilirliğe ve değere sahiptir. Açıklamalar IDENTITY bölümündeki "Kimlik Sütunlarıyla Çalışma" bölümünde tanımlanan koşullar dışında bir sütunun özelliği aktarılır.
Tabloyu aynı SQL Server örneğindeki başka bir veritabanında oluşturmak için new_table form database.schema.table_name tam ad olarak belirtin.
Uzak sunucuda new_table oluşturamazsınız. Ancak, new_table uzak bir veri kaynağından doldurabilirsiniz. Uzak kaynak tablodan new_table oluşturmak için, form linked_server dört bölümlü bir ad kullanarak kaynak tabloyu belirtin. kataloğunu seçin. şemasını seçin. deyimininFROM yan tümcesindeki SELECT object. Alternatif olarak, yan tümcesindeki OPENQUERY işlevini veya OPENDATASOURCE işlevini FROM kullanarak uzak veri kaynağını belirtebilirsiniz.
Dosya grubu
Yeni tablonun oluşturulacağı dosya grubunun adını belirtir. Dosya grubu veritabanında mevcut olmalıdır veya SQL Server altyapısı bir hata döndürür.
Şunlar için geçerlidir: SQL Server 2016 (13.x) SP2 ve üzeri.
Veri türleri
FILESTREAM özniteliği yeni tabloya aktarılmıyor. FILESTREAM BLOB'ları yeni tabloda varbinary(max) BLOB'lar olarak kopyalanır ve depolanır. FILESTREAM özniteliği olmadan , varbinary(max) veri türünün 2 GB sınırlaması vardır. FILESTREAM BLOBu bu değeri aşarsa, hata 7119 oluşturulur ve deyimi durur.
Mevcut bir kimlik sütununu yeni bir tabloya seçtiğinizde, aşağıdaki koşullardan biri doğru olmadığı sürece yeni sütun özelliği devralır IDENTITY :
- deyimi
SELECTbir birleşim içerir. - Birden çok
SELECTdeyim kullanılarakUNIONbirleştirilir. - Kimlik sütunu, seçme listesinde birden çok kez listelenir.
- Kimlik sütunu bir ifadenin parçasıdır.
- Kimlik sütunu uzak bir veri kaynağından geliyor.
Bu koşullardan herhangi biri doğruysa, özelliği devralma IDENTITY yerine sütun oluşturulurNOT NULL. Yeni tabloda bir kimlik sütunu gerekliyse ancak böyle bir sütun kullanılamıyorsa veya kaynak kimlik sütunundan farklı bir tohum veya artım değeri istiyorsanız, işlevi kullanarak IDENTITY sütunu seçme listesinde tanımlayın. Örnekler bölümündeki "İşlevi IDENTITY kullanarak kimlik sütunu oluşturma" bölümüne bakın.
Remarks
deyimi SELECT...INTO iki bölümde çalışır: yeni tablo oluşturulur ve satırlar eklenir. Bu iki adımlı işlem, eklemelerin başarısız olması durumunda işlemin tüm eklemeleri geri alır, ancak yeni (boş) tablonun kaldığı anlamına gelir. İşlemin tamamının bir bütün olarak başarılı olması veya başarısız olması gerekiyorsa , açık bir işlem kullanın.
Microsoft Fabric'teki ambar dosya gruplarını desteklemez. Bu makaledeki dosya gruplarına başvurular ve örnekler Microsoft Fabric'teki Ambar için geçerli değildir.
Sınırlamalar
Yeni tablo olarak tablo değişkeni veya tablo değerli parametre belirtemezsiniz.
Kaynak tablo bölümlenmiş olsa bile bölümlenmiş tablo oluşturmak için kullanamazsınız SELECT...INTO .
SELECT...INTO kaynak tablonun bölüm düzenini kullanmaz. Bunun yerine, yeni tablo varsayılan dosya grubunda oluşturulur. Bölümlenmiş tabloya satır eklemek için önce bölümlenmiş tabloyu oluşturmanız ve ardından deyimini INSERT INTO...SELECT...FROM kullanmanız gerekir.
Kaynak tabloda tanımlanan dizinler, kısıtlamalar ve tetikleyiciler yeni tabloya aktarılamaz ve bunları deyiminde SELECT...INTO belirtemezsiniz. Bu nesnelere ihtiyacınız varsa, deyimini SELECT...INTO yürütürken bunları oluşturabilirsiniz.
Yan ORDER BY tümcenin belirtilmesi, satırların belirtilen sırada eklenmesini garanti etmez.
Seçme listesine seyrek sütun eklediğinizde seyrek sütun özelliği yeni tablodaki sütuna aktarılmıyor. Yeni tabloda bu özelliğe ihtiyacınız varsa, deyimini yürüttkten SELECT...INTO sonra bu özelliği içerecek şekilde sütun tanımını değiştirin.
Seçme listesine hesaplanan bir sütun eklediğinizde, yeni tablodaki ilgili sütun hesaplanan sütun değildir. Yeni sütundaki değerler, yürütülürken hesaplanan SELECT...INTO değerlerdir.
Günlük davranışı
için SELECT...INTO günlüğe kaydetme miktarı, veritabanı için geçerli olan kurtarma modeline bağlıdır. Basit kurtarma modeli veya toplu günlüğe kaydedilen kurtarma modeli altında toplu işlemler en az günlüğe kaydedilir. Minimum günlük kaydıyla SELECT...INTO deyimi, tablo oluşturmaktan ve tabloyu bir INSERT deyimiyle doldurmaktan daha verimli olabilir. Daha fazla bilgi için işlem günlüğü makalesine bakın.
SELECT...INTO kullanıcı tanımlı işlevler (UDF) içeren deyimler tam olarak günlüğe kaydedilen işlemlerdir. deyimi tarafından SELECT...INTO kullanılan kullanıcı tanımlı işlevler herhangi bir veri erişim işlemi gerçekleştirmiyorsa, kullanıcı tanımlı işlevlerin yan tümcesini SCHEMABINDING belirtebilirsiniz. Bu yan tümce, bu kullanıcı tanımlı işlevlerin türetilmiş UserDataAccess özelliğini olarak 0ayarlar. Bu değişiklik sonrasında deyimler SELECT...INTO en az günlüğe kaydedilir.
SELECT...INTO Deyimi, bu özelliğin olarak ayarlandığı en az bir kullanıcı tanımlı işleve başvuruda bulunuyorsa, işlem tam olarak günlüğe 1kaydedilir.
Permissions
CREATE TABLE Veritabanında izin ve ALTER tablonun oluşturulduğu şema üzerinde izin gerektirir.
Examples
A. Birden çok kaynaktan sütun belirterek tablo oluşturma
Aşağıdaki örnek, çeşitli çalışan ve adresle ilgili tablolardan yedi sütun seçerek AdventureWorks2025 veritabanında tablo oluşturur dbo.EmployeeAddresses .
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. Minimum günlük kullanarak satır ekleme
Aşağıdaki örnek, tabloyu oluşturur ve tablodan dbo.NewProductsProduction.Product satır ekler. Örnekte AdventureWorks2025 veritabanının kurtarma modelinin olarak FULLayarlandığı varsayılır. Minimum günlük kaydı sağlamak için AdventureWorks2025 veritabanının kurtarma modeli satır eklemeden önce olarak ayarlanır BULK_LOGGED ve deyiminden SELECT...INTO sonraya FULL sıfırlanır. Bu işlem, deyiminin SELECT...INTO işlem günlüğünde en az alan kullanmasını ve verimli bir şekilde çalışmasını sağlar.
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. Identity işlevini kullanarak kimlik sütunu oluşturma
Aşağıdaki örnekte IDENTITY , AdventureWorks2025 veritabanındaki yeni tabloda Person.USAddress bir kimlik sütunu oluşturmak için işlevi kullanılmaktadır. Bu adım gereklidir çünkü SELECT tabloyu tanımlayan deyimi, özelliğin yeni tabloya aktarılmasını IDENTITY engelleyen bir birleşim içerir. İşlevde IDENTITY belirtilen tohum ve artış değerleri, kaynak tablodaki Person.Addresssütunun AddressID değerlerinden farklıdır.
-- 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. Uzak veri kaynağından sütunlar belirterek tablo oluşturma
Aşağıdaki örnekte, uzak bir veri kaynağından yerel sunucuda yeni bir tablo oluşturmanın üç yöntemi gösterilmektedir. Örnek, uzak veri kaynağına bir bağlantı oluşturarak başlar. Bağlı sunucu adı, MyLinkServer, daha sonra ilk SELECT...INTO deyimin FROM yan tümcesinde ve ikinci SELECT...INTO deyimin işlevinde OPENQUERY belirtilir. Üçüncü SELECT...INTO deyim, bağlı sunucu adını kullanmak yerine doğrudan uzak veri kaynağını belirten işlevini kullanır OPENDATASOURCE .
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. PolyBase ile oluşturulan dış tablodan içeri aktarma
Bu örnek, kalıcı depolama için Hadoop veya Azure Depolama'dan SQL Server'a veri aktarır. Daha sonra SQL Server'da kalıcı depolama için dış tablo tarafından başvuruda bulunılan verileri içeri aktarmak için kullanır SELECT INTO . Son olarak, anında bir ilişkisel tablo oluşturur ve sonra tabloda bir columnstore dizini oluşturur.
Şunlar için geçerlidir: 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. Verileri bir tablodan diğerine kopyalama ve yeni tabloyu belirtilen bir dosya grubunda oluşturma
Aşağıdaki örnekte, başka bir tablonun kopyası olarak yeni bir tablo oluşturma ve bunu kullanıcının varsayılan dosya grubundan farklı bir belirtilen dosya grubuna yükleme gösterilmektedir.
Şunlar için geçerlidir: SQL Server 2016 (13.x) SP2 ve üzeri.
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];