Share via


Yan (Transact-sql)

SELECT…İÇİNE varsayılan filegroup yeni bir tablo oluşturur ve elde edilen satırları sorgu içine ekler. select sözdizimini tam olarak görüntülemek için bkz: select (Transact-sql).

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

[ INTO new_table ]

Bağımsız değişkenler

  • new_table
    Seçim listesi ve veri kaynağından seçilen satırları sütunlara göre oluşturulacak, yeni bir tablo adını belirtir.

    Biçimi new_tableifade seçme listesinde değerlendirilerek belirlenir. Sütunları new_tableseçim listesi tarafından belirtilen sırada yaratılmıştır. Her sütun new_tableolarak ilgili ifade seçme listesinde aynı adı, veri türü, nullability ve değeri vardır. Sütun kimlik özelliği transfer dışında "Çalışma ile kimlik sütunları" tanımlanan koşullar altında Açıklamalar bölümünde.

    Aynı örneği başka bir veritabanındaki bir tablo oluşturmak için SQL Server, belirtmek new_tableşeklinde tam adı database.schema.table_name.

    Oluşturamazsınız new_tableon a remote server; Ancak, doldurabilir new_tableuzak veri kaynağından. Oluşturmak için new_tableşeklinde bir four-part adı kullanarak kaynak tablo bir uzak kaynak tablosundan belirtmek linked_server.catalog.schema. objectselect deyiminin from yan tümcesinde. Seçimli, sen-ebilmek kullanma openquery işlevi veya opendatasource uzak veri kaynağı belirtmek üzere from yan tümcesi işlevinde.

Veri Türleri

FILESTREAM özniteliği için yeni bir tablo aktarmaz. FILESTREAM BLOB'lar kopyalanır ve yeni bir tablo saklanan varbinary(max)BLOB. FILESTREAM özniteliği olmadan varbinary(max)veri türüne sahip bir sınırlama 2 GB. FILESTREAM blob bu değeri aşarsa, hata 7119 oluşturulur ve deyimi durdurulur.

Varolan kimlik sütunu yeni bir tabloya seçildiğinde, aşağıdaki koşullardan biri doğruysa sürece yeni sütun KIMLIK özelliği devralır:

  • select deyimi, bir birleştirme, group by yan tümcesinde veya toplama işlevi içerir.

  • Birden çok select deyimleri UNION kullanarak katılmış.

  • Kimlik sütunu seçme listesinde birden çok kez listelenir.

  • Kimlik sütunu bir ifade bir parçasıdır.

  • Uzak veri kaynağından kimlik sütundur.

Bu durumlardan herhangi biri doğruysa, sütun KIMLIK özelliği devralma yerine not null oluşturulur. Sütun, kimlik sütunu yeni tabloya gereklidir ama böyle bir sütun kullanılabilir değil veya istediğiniz bir tohum veya kaynak kimlik sütunu farklı değeri artırmak, IDENTITY işlevi kullanarak seçme listesinde tanımlayın. Bkz: "IDENTITY işlevi kullanarak kimlik sütunu oluşturma" Aşağıdaki örnekler bölümünde.

Sınırlamalar ve Kısıtlamalar

Yeni bir tablo gibi bir tablo değişkeni veya parametresi tablo değerli belirtemezsiniz.

Sen cant'kullanma select…Into bile kaynak tablo bölümlenmiş bölümlenmiş bir tablo oluşturmak için. SEÇ...İÇİNE kaynak tablo bölüm düzeni kullanmaz; Bunun yerine, oluşturulan yeni tablonun varsayılan filegroup. Bölümlenmiş bir tabloya satır eklemek için bölümlenmiş bir tablo oluşturmalı ve ardından INSERT INTO kullanın...select from deyimi.

Dizinler, kısıtlamaları ve Tetikleyiciler kaynak tablosunda tanımlanan yeni tabloya aktarılmıyor ya da seçin belirtilebilir...INTO deyimi. Bu nesneler gerekiyorsa seçin yürüttükten sonra bunları oluşturabilirsiniz...INTO deyimi.

order by yan tümcesi belirtme, satırları belirtilen sırada eklenen garanti etmez.

Seyrek sütun seçme listesinde dahil olduğunda yeni tablodaki sütun seyrek sütun özelliği aktarmaz. Bu özellik yeni tabloda gerekiyorsa seçin yürüttükten sonra sütun tanımı değiştirmek...INTO deyimi bu özellik eklenecek.

Hesaplanmış bir sütun seçme listesinde yer aldığında, yeni tabloda karşılık gelen sütun hesaplanan bir sütun değil. Yeni sütun değerleri seçin anda işlediği değerler...Into idam edildi.

Günlüğe Yazma Davranışı

select için günlük miktarını...İÇİNE geçerli veritabanı için kurtarma modeli bağlıdır. Basit kurtarma modelini veya toplu kurtarma modeli altında toplu işlemler minimal günlüğe kaydedilir. select… kullanarak en az bir günlük ile INTO deyimi daha bir tablo oluşturursunuz ve Tablo INSERT deyimi ile doldurma daha verimli olabilir. Daha fazla bilgi için, bkz. İşlem günlüğü (SQL Server).

İzinler

Hedef veritabanında create table izni gerektirir.

Örnekler

A.Birden fazla kaynaktan sütunları belirterek tablo oluşturma

Aşağıdaki örnek tablo oluşturur dbo.EmployeeAddressesyedi sütun seçerek çeşitli çalışan ve ilgili adresi tablo.

USE AdventureWorks2012;
GO
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.En az bir günlük kullanarak satır ekleme

Aşağıdaki örnek tablo oluşturur dbo.NewProductsve satır ekler Production.Producttablosu. Örnek varsayar kurtarma modeli AdventureWorks2012veritabanı tam olarak ayarlanmışsa. Kullanılan en az bir günlük olduğundan emin olmak için kurtarma modeli AdventureWorks2012veritabanı, bulk_logged için ayarlanmışsa, önce satır eklenir ve tam seçin sonra Sıfırla...INTO deyimi. Bu işlem, seçin sağlar...İşlem günlüğü en az alan INTO deyimi kullanır ve verimli şekilde gerçekleştirir.

USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.NewProducts', 'U') IS NOT NULL
    DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks2012 SET RECOVERY BULK_LOGGED;
GO

SELECT * INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25 
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;
GO

C.IDENTITY işlevi kullanarak kimlik sütunu oluşturma

Aşağıdaki örnek, kimlik sütunu yeni tablo oluşturmak için IDENTITY işlevi kullanır Person.USAddress. Yeni tabloya aktarma değil kimlik özelliği neden bir birleştirme tablo tanımlayan select deyimi içerir, bu özellik gereklidir. KİMLİK işlevinde belirtilen başlangıç ve artış değerleri o--dan farklı olduğunu fark AddressIDkaynak tablo sütununda Person.Address.

USE AdventureWorks2012;
GO
IF OBJECT_ID ('Person.USAddress') IS NOT NULL
DROP TABLE Person.USAddress;
GO
-- 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 örnek, uzak veri kaynağından yerel sunucuda yeni bir tablo oluşturma üç yöntem gösterir. Örneğin, uzak veri kaynağı bağlantısı oluşturarak başlar. Bağlantılı sunucu adı MyLinkServer,sonra ilk select from yan tümcesinde belirtilen...Deyimi ve openquery işlevini ikinci Seç...INTO deyimi. Üçüncü Seç...INTO deyimi doğrudan bağlantılı sunucu adı kullanarak yerine uzak veri kaynağı belirler opendatasource işlevi kullanır.

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'AdventureWorks2012';
GO
USE AdventureWorks2012;
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.AdventureWorks2012.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 AdventureWorks2012.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')
    .AdventureWorks2012.HumanResources.Department;
GO

Ayrıca bkz.

Başvuru

select (Transact-sql)

ÖRNEKLER (Transact-sql)

Insert (Transact-sql)

IDENTITY (işlev) (Transact-sql)