将行插入TargetTable,比较新表中select的行

时间:2015-04-24 18:22:28

标签: sql sql-server tsql

我正在处理存储过程,但它没有像我预期的那样工作。寻找一双新鲜的眼睛,看看我错过了什么。我正在填充一个具有一些不同值的表,如果这些值不存在于我插入的表中,那么就这样做。不要愚蠢。值列表具有行,但不会插入目标表。

declare @DistinctTable table (tableName varchar(30))

insert into @DistinctTable (tableName) (SELECT DISTINCT Reference FROM dbo.Tmp_Import_Rows)


INSERT INTO [dbo].[TargetTable] 
       (RowID
       ,A
       ,B
       ,C
       ,D
       ,E
       ,F
       ,G
       ,User
       ,Machine
       ,Date
       ,TableRef)

       (SELECT NEWID(), 
        0,
       0, 
       0, 
       0,
       0, 
       0, 
       0, 
       @pUserName,
       HOST_NAME(), 
       getdate(), 
       tableName
       FROM @DistinctTable 
       WHERE (tableName NOT IN (select [TableRef] from [TargetTable] )))

正如我所说,我在@DistinctTable中获取行,但他们不会插入[TargetTable]。我觉得我忽略了一些小事。任何建议都会很棒,谢谢。

编辑:示例数据

dbo.TargetTable
RowId, TableReferecne| Inches | Volume | Unused | Unused | Unused | Unused | UserName | MACHINE | DATE | Table#

897e0a1f-f139-4c1d-9bac-0a64518cd56a, Table50, 12,20,0,0,0,0,someuser, somemachine, 4-24-15, Table50
dbo.Tmp_Import_Rows

TableReference | Inches| Volume | Table #
Table60        | 60    |  1000  | Table 60
Table70        | 70    |  1100  | Table 70

@DistinctTable填充了唯一值On [Table#]

tableName

Table60
Table70

我想要它做的是从Tmp_Import_rows获取不同的值,如果这些值不存在于TargetTable中,请插入它。

2 个答案:

答案 0 :(得分:0)

尝试WHERE NOT EXISTS而不是NOT IN,看看你是否得到任何回报:

SELECT *
FROM @DistinctTable t1
WHERE NOT EXISTS (
        SELECT 1
        FROM [dbo].[TargetTable] t2
        WHERE t1.tableName = t2.tableRef
        );

答案 1 :(得分:0)

你不需要关键字VALUES吗?

e.g。 insert into table (col1,col2,col3...) values (val1,val2,val3...)等?