2015-01-26 38 views
0

我:如何使用SSIS中的密钥将少量列更改为另一个表?

Collisions{PK_id, cashLoss, deaths, city, state, county} 

我想:

Collisions{PK_id, cashLoss, deaths, #IdLocalization} 
Localization{#LocalizationID(autoincremental), city, state, county} // but {city, state, county} must be distinct 

如何做到在SSIS和SQL?

E.g.

我可以在表本地化自动增加的id设置,但如何把这个ID表碰撞与SSIS?

+0

从画面至少我明白,你想从一个创建2个表? – Darka 2015-01-27 09:06:22

回答

0

您可以使用SQL脚本如下:

/******* DATA PREPARATION *****/ 

IF OBJECT_ID('tempdb..#Collisions') IS NOT NULL 
DROP TABLE #Collisions 

IF OBJECT_ID('tempdb..#Localization') IS NOT NULL 
DROP TABLE #Localization 

CREATE TABLE #Collisions (PK_ID INT, cashLoss INT, deaths INT, city varchar(20), state varchar(20), country varchar(20)) 
CREATE TABLE #Localization (LocalizationId INT IDENTITY (1, 1), city varchar(20), state varchar(20), country varchar(20)) 

INSERT INTO #Collisions (PK_ID, cashLoss, deaths, city, state, country) 
SELECT PK_ID, cashLoss, deaths, city, state, country 
FROM (VALUES 
(1, 3, 6, 'CityA', 'StateA', 'CountryA'), 
(2, 56, 1, 'CityB', 'StateA', 'CountryA'), 
(3, 54, 0, 'CityA', 'StateA', 'CountryA'), 
(4, 3, 0, 'CityB', 'StateA', 'CountryA'), 
(5, 23, 0, 'CityA', 'StateB', 'CountryB')) AS T(PK_ID, cashLoss, deaths, city, state, country) 



/******* CREATE/UPDATE TABLES *****/ 

--Create Localization table with unique values 
INSERT INTO #Localization (city, state, country) 
SELECT DISTINCT city, state, country 
FROM #Collisions 

--Add new LocalizationId column to #Collisions 
ALTER TABLE #Collisions ADD LocalizationId INT 

--Would be nice to add foreign key on #Collisions.LocalizationId 

--Update LocalizationId 
UPDATE C 
    SET LocalizationId = L.LocalizationId 
FROM #Collisions AS C 
INNER JOIN #Localization AS L 
    ON L.city = C.city 
    AND L.state = C.state 
    AND L.country = C.country 

--Drop 3 columns 
ALTER TABLE #Collisions DROP COLUMN city, state, country 

--RESULT 
SELECT * 
FROM #Collisions 
相关问题