SQL Server: вставка значений в одну таблицу на основе данных двух таблиц

У меня есть две таблицы с одинаковым именем в двух разных базах данных. TableA в DatabaseA содержит столбец ServerName, а другой TableA в DatabaseB содержит столбец ServerId. У меня есть третья таблица TableB в DatabaseB, содержащая ServerId и ServerName, и я хочу сопоставить ServerName в DatabaseA и его ServerId в DatabaseB с DatabaseB TableA.

Например ...

In DatabaseA:

TableA:

ServerName
  MyServer
  HisServer
  HerServer

In DatabaseB:

TableB:

ServerId | ServerName
1          MyServer
2          HisServer
3          HerServer

Я хочу сопоставить ServerNames с ServerIds и вставить идентификаторы в DatabaseB TableA.

Заранее спасибо.


person Sameer Singh    schedule 17.10.2011    source источник


Ответы (1)


Вот полный скрипт.

USE master;
IF EXISTS (SELECT * FROM sys.databases WHERE name = N'DatabaseA')
    DROP DATABASE DatabaseA;
IF EXISTS (SELECT * FROM sys.databases WHERE name = N'DatabaseB')
    DROP DATABASE DatabaseB;
CREATE DATABASE DatabaseA;
CREATE DATABASE DatabaseB;
GO
USE DatabaseA;
GO
CREATE TABLE dbo.TableA (
    ServerName  sysname     NOT NULL
);
INSERT INTO dbo.TableA VALUES (N'MyServer');
INSERT INTO dbo.TableA VALUES (N'HisServer');
INSERT INTO dbo.TableA VALUES (N'HerServer');
SELECT * FROM dbo.TableA;
GO
USE DatabaseB;
GO
CREATE TABLE dbo.TableA (
    ServerID    smallint    NOT NULL
);

CREATE TABLE dbo.TableB (
    ServerID    smallint    NOT NULL,
    ServerName  sysname     NOT NULL
);
INSERT INTO dbo.TableB VALUES (1, N'MyServer');
INSERT INTO dbo.TableB VALUES (2, N'HisServer');
INSERT INTO dbo.TableB VALUES (3, N'HerServer');
SELECT * FROM dbo.TableB;

-- "I want to map the ServerNames to the ServerIds and insert the Ids into DatabaseB's TableA."

INSERT INTO dbo.TableA (
    ServerID
)
SELECT bb.ServerID
FROM DatabaseA.dbo.TableA   AS aa
JOIN DatabaseB.dbo.TableB   AS bb
  ON aa.ServerName = bb.ServerName;

SELECT * FROM dbo.TableA;

И вывод:

ServerName
-------------
MyServer
HisServer
HerServer

ServerID ServerName
-------- -------------------
       1 MyServer
       2 HisServer
       3 HerServer

ServerID
--------
       1
       2
       3
person Rob Garrison    schedule 17.10.2011
comment
Пометка как ответ, так как вы помогли мне найти немного более простое решение. :-) - person Sameer Singh; 23.11.2011