将行(如果尚不存在)插入到已存在的表(在 MS-SQL / T-Sql 中)

now*_*ed. 1 sql t-sql sql-server triggers

我们在 db 中已经有这个表 ( IPConfig)。(SQL Server 2k8)

IP         |   Member
-----------------------
10.1.2.100 | Joe
10.2.2.200 | Maley
Run Code Online (Sandbox Code Playgroud)

现在,我应该有一个查询应该执行以下操作:

  1. 保持当前表不变。如果表不存在,请创建一个。
  2. 插入新记录(在下一版本部署中定义)

我从这个开始但无法继续。

    IF (NOT EXISTS (SELECT * 
                     FROM INFORMATION_SCHEMA.TABLES 
                     WHERE TABLE_SCHEMA = 'dbo' 
                     AND  TABLE_NAME = 'IPConfig'))
    BEGIN
      CREATE TABLE dbo.IPConfig (
        IP CHAR(10) PRIMARY KEY NOT NULL,
        Member VARCHAR(32) NOT NULL)
    END

    DECLARE @TempTable Table(               -- Create a temp table.
     IP CHAR(10) PRIMARY KEY NOT NULL,
     Member VARCHAR(32) NOT NULL)

   INSERT INTO @TempTable( 
    IP,
    Member)
    SELECT
      '10.1.2.100',   --Already existing Ip; dont insert
      'Joe'
    UNION SELECT
      '10.2.2.200',   --Already existing Ip; dont insert
      'Maley',
    UNION SELECT
      '10.3.5.200',   --New; Insert.
      'NewUser',

UPDATE TABLE dbo.IPConfig 
/// Here what should be done ? Should I loop through the temp table using triggers or what is the best way ?
Run Code Online (Sandbox Code Playgroud)

请举一个超级简单的例子。

抱歉,如果这是一个天真的问题;对于 MSSQL 编程来说是全新的。

小智 5

如果我理解正确的话,您只会将新的不匹配的 IP 插入 dbo.IPConfig。左外连接是这里的最佳选择。将结果插入到目标表中。

INSERT INTO dbo.IPConfig([IP], [Member])
SELECT a.[IP], a.[Member]
FROM @TempTable a
LEFT OUTER JOIN dbo.IPConfig b ON a.[IP]=b.[IP]
WHERE b.[IP] is null
Run Code Online (Sandbox Code Playgroud)