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ı
SEÇMEK... INTO, varsayılan dosya grubunda yeni bir tablo oluşturur ve sorgudan elde edilen satırları buna ekler. SELECT söz diziminin tamamını görüntülemek için bkz. SELECT (Transact-SQL).
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. Bir sütunun IDENTITY özelliği, Açıklamalar bölümündeki "Kimlik Sütunlarıyla Çalışma" bölümünde tanımlanan koşullar dışında 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. nesnesini SEÇIN deyiminin FROM yan tümcesinde bulabilirsiniz. Alternatif olarak, uzak veri kaynağını belirtmek için FROM yan tümcesindeki OPENQUERY işlevini veya OPENDATASOURCE işlevini kullanabilirsiniz.
Dosya grubu
Yeni tablonun oluşturulacağı dosya grubunun adını belirtir. Belirtilen dosya grubu veritabanında bulunmalıdır, aksi halde SQL Server altyapısı bir hata oluşturur.
Şunlar için geçerlidir: SQL Server 2016 (13.x) SP2 ve üzeri.
Veri Türleri
FILESTREAM özniteliği yeni tabloya aktarılmaz. 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 durdurulur.
Mevcut bir kimlik sütunu yeni bir tabloya seçildiğinde, aşağıdaki koşullardan biri doğru olmadığı sürece yeni sütun IDENTITY özelliğini devralır:
SELECT deyimi birleştirme içeriyor.
Birden çok SELECT deyimi UNION kullanılarak birleştiriliyor.
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 biri true ise, IDENTITY özelliğini devralma yerine NOT NULL sütunu oluşturulur. 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ış değeri istiyorsanız, IDENTITY işlevini kullanarak seçme listesindeki sütunu tanımlayın. Aşağıdaki Örnekler bölümünde "IDENTITY işlevini 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, eklemelerin başarısız olması durumunda tümünün geri alınacağı, ancak yeni (boş) tablonun kalacağı 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 ve Kısıtlamalar
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ılmaz ve deyiminde SELECT...INTO belirtilmez. Bu nesneler gerekliyse, 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.
Seyrek sütun seçme listesine eklendiğinde seyrek sütun özelliği yeni tablodaki sütuna aktarılmaz. Bu özellik yeni tabloda gerekliyse, SELECT... yürütülürken sütun tanımını değiştirin. BU özelliği eklemek için INTO deyimi.
Hesaplanan sütun seçme listesine eklendiğinde, 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.
Kayıt 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 deyimini SELECT...INTO kullanmak, tablo oluşturmaktan ve sonra tabloyu INSERT deyimiyle doldurmaktan daha verimli olabilir. Daha fazla bilgi için bkz . İşlem Günlüğü (SQL Server).
SELECT...INTO kullanıcı tanımlı işlevler (UDF) içeren deyimler tam olarak günlüğe kaydedilen işlemlerdir. deyiminde 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şlevler için SCHEMABINDING yan tümcesini belirtebilirsiniz. Bu yan tümce, bu kullanıcı tanımlı işlevler için türetilmiş UserDataAccess özelliğini 0 olarak ayarlar. Bu değişiklik sonrasında deyimler SELECT...INTO en az günlüğe kaydedilir.
SELECT...INTO Deyimi bu özelliği 1 olarak ayarlanmış en az bir kullanıcı tanımlı işleve başvuruda bulunuyorsa, işlem tam olarak günlüğe kaydedilir.
Permissions
Veritabanında CREATE TABLE izni ve tablonun oluşturulduğu şemada ALTER izni 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
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. Minimum günlük kullanarak satır ekleme
Aşağıdaki örnek, tabloyu oluşturur ve tablodan dbo.NewProductsProduction.Product satır ekler. Örnek, AdventureWorks2025 veritabanının kurtarma modelinin FULL olarak ayarlandığını varsayıyor. Minimum günlük kullanımını sağlamak için, AdventureWorks2025 veritabanının kurtarma modeli, satırlar eklenmeden önce BULK_LOGGED olarak ayarlanır ve SELECT... İÇ VER. Bu işlem, SELECT... INTO deyimi işlem günlüğünde minimum alan kullanır ve verimli bir şekilde performans gösterir.
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. IDENTITY işlevini kullanarak kimlik sütunu oluşturma
Aşağıdaki örnek, AdventureWorks2025 veritabanındaki yeni tabloda Person.USAddress bir kimlik sütunu oluşturmak için IDENTITY fonksiyonunu kullanır. Bu gereklidir çünkü tabloyu tanımlayan SELECT deyimi bir birleşim içerir ve bu da IDENTITY özelliğinin yeni tabloya aktarılmamasıyla sonuçlanır. IDENTITY işlevinde belirtilen tohum ve artış değerlerinin kaynak tablodaki AddressIDPerson.Addresssütundan farklı olduğuna dikkat edin.
-- 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... öğesinin FROM yan tümcesinde belirtilir. INTO deyimi ve ikinci SELECT'in OPENQUERY işlevinde... INTO deyimi. Üçüncü SELECT... INTO deyimi, bağlı sunucu adını kullanmak yerine doğrudan uzak veri kaynağını belirten OPENDATASOURCE işlevini kullanır.
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
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. PolyBase ile oluşturulan dış tablodan içeri aktarma
Kalıcı depolama için Hadoop veya Azure Depolama'dan SQL Server'a veri aktar. SQL Server'da kalıcı depolama için dış tablo tarafından başvuruda bulunılan verileri içeri aktarmak için kullanın SELECT INTO . Anında bir ilişkisel tablo oluşturun ve ardından ikinci adımda tablonun üstünde bir sütun deposu dizini oluşturun.
Ş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;
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];
Ayrıca Bkz.
SEÇ (Transact-SQL)
SELECT Örnekleri (Transact-SQL)
INSERT (Transact-SQL)
KİmLİk (İşlev) (Transact-SQL)