2015-06-16 4 views
0

У меня есть существующая таблица, в которой хранятся данные, полученные мной с другого сервера.SQL Server: копирование данных из столбцов в другую таблицу со многими столбцами

Теперь я хочу скопировать эти данные в одну таблицу, где это будет моя финальная таблица, где я мог бы выполнить операцию CRUD.

Кулак таблица (справочная база данных), чтобы восстановить мой TempTable - OK

INSERT INTO [PFTracking].[dbo].[TempTable] 
    SELECT 
     c.[pf_id] 
     ,a.[RequestDate] 
     ,c.[pf_carrierUsed] 
     ,b.[PiecePrice] * b.[PartQuantity] as [Amount] 
     ,c.[pf_type] 
     ,c.[pf_resSupplier] 
     ,c.[pf_resCustomer] 
     ,c.[pf_trailerNum] 
     ,b.[PartDesc] 
     ,c.[pf_chargeBack] 
     ,c.[pf_chargetoPlant] 
    FROM 
     [CNCTC-WEB01].[NOP_PR].[dbo].[Requests] a 
    JOIN 
     [CNCTC-WEB01].[NOP_PR].[dbo].[Parts] b on a.[RequestID] = b.[RequestID] 
    JOIN 
     [PHRIZ-WEBAPP01].[PFTracking].[dbo].[Tbl_PFExcel] c ON b.[PartNumber] LIKE '%' + c.pf_id + '%' 
    WHERE 
     a.[EntityName] LIKE '%PTA' 
     AND a.[RequestDate] BETWEEN '2015-04-20 00:00:00.000' AND GETDATE() 

и теперь .. так как мой TempTable состоит из следующих столбцов:

[PTAID] 
    ,[RequestDate] 
    ,[ProvName] 
    ,[Amount] 
    ,[INorOUT] 
    ,[Supplier] 
    ,[Customer] 
    ,[Program] 
    ,[IssueDesc] 
    ,[Chargeable] 
    ,[Company] 

я попытался сделать эту команду:

INSERT INTO [PFTracking].[dbo].[UserInput] 
    SELECT 
     [PTAID] 
     ,[RequestDate] 
     ,[ProvName] 
     ,[Amount] 
     ,[INorOUT] 
     ,[Supplier] 
     ,[Customer] 
     ,[Program] 
     ,[IssueDesc] 
     ,[Chargeable] 
     ,[Company] 
FROM [PFTracking].[dbo].[TempTable] 

и это одна:

INSERT INTO [PFTracking].[dbo].[UserInput] 
    SELECT * 
    FROM [PFTracking].[dbo].[TempTable] 

Но все, что я получил это ошибка:

Msg 213, Level 16, State 1, Line 3
Insert Error: Column name or number of supplied values does not match table definition.

Любая идея, как решить мою проблему?

+2

сообщение об ошибке ОЧЕНЬ явное. –

+0

[Плохие привычки пинать: используя SELECT */опустить список столбцов] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting -the-column-list.aspx) –

ответ

3

В качестве лучшей практики вы должны написать заявление вставки как:

Insert into [PFTracking].[dbo].[UserInput](Col1,Col2,...) 
-- list the names of columns explicitly in which data is to be inserted 
SELECT 
     [PTAID] 
     ,[RequestDate] 
     ,[ProvName] 
     ,[Amount] 
     ,[INorOUT] 
     ,[Supplier] 
     ,[Customer] 
     ,[Program] 
     ,[IssueDesc] 
     ,[Chargeable] 
     ,[Company] 
FROM [PFTracking].[dbo].[TempTable] 

Вы можете опустить имена столбцов, которые получают свои значения автоматически из Identity свойств, Default ограничения или когда позволяют Nulls.

+0

Спасибо .. я получил это;) – Anaiah

Смежные вопросы