使用查找表更新脚本以进行搜索和替换

时间:2013-03-13 14:28:48

标签: sql-server-2008 tsql sql-update

我有一个地板名称表,我需要用数值替换。我正在手工构建查找表。不知道下一步该做什么......有更好的方法吗?

屏幕截图: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等。

1 个答案:

答案 0 :(得分: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相比,LkupFloorNum实际上更容易输入 LOT