Aracılığıyla paylaş


Yan TÜMCESİNE (Transact-SQL)

SELECT…İÇİNE varsayılan dosya grubu 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ı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

[ INTO new_table ]

Bağımsız değişkenler

  • new_table
    Oluşturulan, seçim listesi ve veri kaynakSeçilen satırları sütunlara göre yeni bir tablo adını belirtir.

    Biçimi new_table belirlenir değerlendirmek ifadeler select listesi.Sütun new_table göre belirtilen sırada oluşturulurseçim listesi.Her bir sütun new_table aynı adı, veri türü, null atanabilirlik, ve değer ilgili olarak ifade seçme listesinde.Bir sütun kimlik özellik dışında "Çalışma ile kimlik sütunlarının içinde" tanımlanan koşullar altında aktarılır Açıklamalar bölümünde.

    Aynı örnek üzerinde başka bir veritabanındaki bir tablo oluşturmak için SQL Server, belirtmek new_table tam bir form adı olarak database.schema.table_name.

    Oluşturamazsınız new_table bir uzak sunucuda; Ancak, doldurmak new_table uzak veri kaynak.Oluşturmak için new_table Uzak kaynaktablo kaynaktablo biçiminde dört bir ad kullanarak belirtmek linked_server.catalog.schema.nesne select deyimfrom yan tümce içinde.Alternatif olarak, kullanabileceğiniz SORGUAÇ işlev veya opendatasourceişlev uzak verikaynakbelirtmek üzere from yan tümce tümcesinde.

Veri Türleri

FILESTREAM öznitelik yeni tabloaktarılmaz.FILESTREAM BLOB'lar kopyalanır ve yeni bir tablo saklanan varbinary(max) BLOB sayısı.FILESTREAM öznitelikolmadan varbinary(max) veri türüne sahip bir sınırlama2 gb.FILESTREAM DAMLA bu değeri aşarsa, hata 7119 ortaya çıkar ve deyim durdurulur.

Varolan bir kimlik sütun yeni bir tabloseçildiğinde, aşağıdaki koşullardan biri doğruysa yeni bir sütun kimlik özellikdevralır:

  • select deyim , birleştirmek, group by yan tümceveya toplu işleviçerir.

  • Birden çok select deyimleri UNION kullanılarak birleştirilir.

  • Kimlik sütun listelenen seçme listesinde birden fazla saat .

  • Kimlik sütun bir ifadebir parçasıdır.

  • Kimlik sütun bir uzak veri kaynakolur.

Bu koşullardan biri doğruysa, kimlik özellikdevralmasını yerine not null sütun oluşturulur.Yeni tablo kimlik sütun gereklidir, ancak böyle bir sütun kullanılamıyor veya istediğiniz bir tohum veya kaynak kimlik sütun' dan farklı olan değeri artırmak, kimlik işlevkullanarak seçme listesinde sütun tanımlayın."Kimlik işlevkullanarak kimlik sütun oluşturma" konusuna bakın Aşağıdaki örnekler bölümünde.

Sınırlamalar ve kısıtlamalar

Bir tablo değişkeni veya tablobelirtemezsiniz-yeni tablodeğerli parametresi.

select… kullanamazsınızHatta kaynaktablo bölümlenmiş bir bölümlenmiş tablooluşturmak için INTO. SEÇİN...İÇİNE bölümleme düzeni kaynak tablokullanmaz; Bunun yerine, yeni bir tablo varsayılan dosya grubuoluşturulur.bölümlenmiş tablosatır eklemek için önce bölümlenmiş tablo oluşturun ve sonra INSERT INTO kullanın...select from deyim.

SEÇİN...INTO ile kullanılamaz hesaplamak için.

Yeni tablodizinleri, kısıtlamaları ve tetikleyiciler kaynaktablo tanımlanan aktarılmaz veya select belirtilebilir...INTO deyim. Bu nesneler gerekliyse, select yürüttükten sonra bunları oluşturmanız gerekir...INTO deyim.

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

Seyrek sütun seçme listesinde yer aldığında, yeni bir tablo sütun seyrek sütunözellik aktarılmaz. Bu özellik yeni tablogerekli ise, sütun tanımının select yürütmeden sonra alter...Bu özellikeklenecek INTO deyim .

Hesaplanmış bir sütun seçme listesinde yer aldığında, yeni tablo karşılık gelen sütun hesaplanmış bir sütundeğil.Yeni sütun değerleri saat seçin hesaplanmış değerlerdir...INTO çalıştırıldı.

Günlüğe kaydetme davranışını

SEÇİM için günlük kaydını tutar...HALİNDE geçerli veritabanı için kurtarma modeli bağlıdır.Basit kurtarma modeli altında veya toplu günlük kurtarma modeli, toplu işlemler en az oturum açmış.select… kullanarak minimal günlüğü ile INTO deyim bir tablo oluşturursunuz ve tablo INSERT deyimile doldurma'den daha verimli olabilir.Daha fazla bilgi için, bkz. En az oturum işlemleri.

İzinler

hedef veritabanında create table izni gerektirir.

Örnekler

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

Aşağıdaki örnek tablooluştururdbo.EmployeeAddresses seçerek yedi sütun çeşitli personel ile ilgili ve adres ile ilgili tablolar.

USE AdventureWorks2008R2;
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 tablooluştururdbo.NewProducts 'den satırlar ekler ve Production.Producttablo. Örnek varsayar kurtarma modeli, AdventureWorks2008R2 veritabanı olan küme için dolu.En az bir günlük olduğundan emin olmak için kullanılan, kurtarma modeli, AdventureWorks2008R2 veritabanı olan küme bulk_logged satır eklenir ve tam seçin sonra sıfırlamak önce...INTO deyim.Bu işlem, select sağlar...Hareket günlüğündeki yoğunluğuyla INTO deyim kullanır ve verimli bir şekilde gerçekleştirir.

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

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

C.KİMLİK işlevkullanarak kimlik sütun oluşturma

Aşağıdaki örnek, kimlik sütun yeni tablooluşturmak için kimlik işlev kullananPerson.USAddress. tablo tanımlayan select deyim aktarmak değil yeni tablokimlik özellik neden olacak bir birleştirmek, içerdiği için bu gereklidir.KİMLİK işlev , belirtilen başlangıç ve artış değerleri olanlardan farklı olduğunu fark AddressID kaynaktablosütun Person.Address.

USE AdventureWorks2008R2;
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 verikaynaksütunları belirterek tablo oluşturma

Aşağıdaki örnek, bir uzak verikaynakyerel sunucuda yeni bir tablo oluşturma üç yöntemi gösterilmiştir. Bu örnek, uzak veri kaynakbir bağlantı oluşturarak başlar.bağlantılı sunucu adı MyLinkServer, from yan tümce ilk seçin sonra belirtilen...INTO deyim ve ikinci select SORGUAÇ işlev ...INTO deyim.Üçüncü Seç...INTO deyim bağlantılı sunucu adı kullanmak yerine doğrudan uzak verikaynak belirler opendatasource işlevkullanı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'AdventureWorks2008R2';
GO
USE AdventureWorks2008R2;
GO
-- Specify the remote data source in the FROM clause using a four-part name 
-- in the form linked_server.catalog.schema.object.
SELECT *
INTO dbo.Departments
FROM MyLinkServer.AdventureWorks2008R2.HumanResources.Department
GO
-- Use the OPENQUERY function to access the remote data source.
SELECT *
INTO dbo.DepartmentsUsingOpenQuery
FROM OPENQUERY(MyLinkServer, 'SELECT *
               FROM AdventureWorks2008R2.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 *
INTO dbo.DepartmentsUsingOpenDataSource
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=server_name;Integrated Security=SSPI')
    .AdventureWorks2008R2.HumanResources.Department;
GO