2013-03-13 24 views
0

我有一個需要用數字值替換的樓層名稱的表。我正在手動構建查找表。不知道下一步該做什麼...有更好的方法嗎?使用查找表進行搜索和替換的更新腳本

截圖:http://i49.tinypic.com/2mc921e.png

BEGIN TRY 
BEGIN TRANSACTION 

-- lookup table 
DECLARE @FloorLkup TABLE(
    FloorName VARCHAR(MAX) NOT NULL, 
    FloorNum INT NOT NULL 
); 

INSERT INTO @FloorLkup SELECT 'First floor', '1' 
INSERT INTO @FloorLkup SELECT 'First', '1' 
INSERT INTO @FloorLkup SELECT 'Second floor', '2' 
INSERT INTO @FloorLkup SELECT 'Second', '2' 
-- etc. 
INSERT INTO @FloorLkup SELECT 'Ninth', '9' 

print 'Done' 
COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
print 'Did not work' 
ROLLBACK 
END CATCH 

而且,問題是:部分樓層被命名爲FirstFirst floor

+0

你可以顯示你需要修復的結構和數據嗎? – 2013-03-13 14:30:09

+0

@AaronBertrand請參閱http://i49.tinypic.com/2mc921e.png你還需要知道什麼? – Kyle 2013-03-13 14:35:11

+0

那麼,你想把這個數字放在'FloorName'列中,還是你想添加一個新的數字列,更新它,然後刪除'FloorName'列?我推薦後者。它允許你在提交之前檢查你的工作。 – 2013-03-13 14:38:41

回答

1
-- populate your @FloorLkup table here 

-- now add a new numeric column: 
ALTER TABLE dbo.UnknownTableName 
    ADD FloorNumber INT; 

-- now update based on matches in @FloorLkup 
UPDATE t 
    SET FloorNumber = fl.FloorNum 
    FROM dbo.UnknownTableName AS t 
    INNER JOIN @FloorLkup AS fl 
    ON t.FloorName = fl.FloorName; 

-- check your work 
SELECT * FROM dbo.UnknownTableName; 

-- if it's correct: 
ALTER TABLE dbo.UnknownTableName 
    DROP COLUMN FloorName; 

你必須與你的目標表的名稱,以取代UnknownTableName ,因爲你忘了告訴我們。您可能還需要刪除任何約束或其他明確提及的FloorName列,然後才能刪除它。

另外請不要害怕元音或更長的名字。 LookupFloorNumber實際上是LOTLkupFloorNum更易於輸入。