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