SQL server: Einfügen einer list von Ints in eine temporäre Tabelle

Ich habe eine list von IDs in einer Textdatei wie folgt:

24641985 , 24641980 , 24641979 , 24641978 , 24641976 , 24641974 , ... ... 24641972 , 24641971 , 24641970 , 24641968 , 24641965) 

Es gibt Zehntausende von ihnen.

Jetzt muss ich wissen, welche ids in dieser list sind, die nicht einer ID in meinem Tisch entsprechen.

Ich glaube, ich sollte sie in einen temporären Tisch stellen, dann sagen Sie so etwas wie:

 select theId from #tempIdCollection where theId not in (select customerId from customers) 

Problem ist, ich weiß nicht, wie man sie in den Tempentisch bringt!

Kann jemand helfen? Das muss nicht effizient sein. Ich muss es nur einmal laufen lassen. Irgendwelche Lösungsvorschläge willkommen!

Danke im Voraus!

-Ev

Ich würde eine Tabellenvariable verwenden. Sie erklären es wie eine regelmäßige Variable.

 declare @tempThings table (items int) insert @tempThings values (1) 

Haben Sie eine "permanente temp" Tabelle, auch bekannt als eine "Posteingang" Tabelle. Nur eine einfache Tablette nannte so etwas wie "temp_bunchOfKeys".

Ihre Grundfolge ist:

1) Abschneiden temp_bunchOfKeys

2) BCP die Textdatei in temp_bunchOfKeys

3) Ihr sql ist dann:

 select theId from Temp_BunchOfKeys where theId not in (select customerId from customers) 

Ich hatte das gleiche Problem aber mit Strings anstelle von ganzen Zahlen und triggerse es mit einer Split-function (siehe Code unten), die eine Tabellenvariable mit dem listninhalt zurückgibt. Ändern Sie die function für Ihren Zweck.

Beispiel für die Aufruf der function

 create table #t (Id int, Value varchar(64)) insert into #t (Id, Value) select Id, Item from dbo.fnSplit('24641978, 24641976, ... 24641972, 24641971', ',') /*Do your own stuff*/ drop table #t 

function

 if object_id(N'dbo.fnSplit', N'TF') is not null drop function dbo.fnSplit GO create function dbo.fnSplit(@string varchar(max), @delimiter char(1)) returns @temptable table (Id int, Item varchar(8000)) as begin -- NB! len() does a rtrim() (ex. len('2 ') = 1) if ( len( @string ) < 1 or @string is null ) return declare @idx int declare @slice varchar(8000) declare @stringLength int declare @counter int ; set @counter = 1 set @idx = charindex( @delimiter, @string ) while @idx!= 0 begin set @slice = ltrim( rtrim( left(@string, @idx - 1))) set @slice = replace( replace(@slice, char(10), ''), char(13), '') insert into @temptable(Id, Item) values(@counter, @slice) -- To handle trailing blanks use datalength() set @stringLength = datalength(@string) set @string = right( @string, (@stringLength - @idx) ) set @idx = charindex( @delimiter, @string ) set @counter = @counter + 1 end -- What's left after the last delimiter set @slice = ltrim(rtrim(@string)) set @slice = replace( replace(@slice, char(10), ''), char(13), '') insert into @temptable(Id, Item) values(@counter, @slice) return end GO 

Sie können alle diese IDs aus der Textdatei in eine Excel-file insert. Dann benutze den Import aus der Excel-function im Sql-server, um eine Tabelle aus dieser Excel-file zu erstellen. Ganz einfach wirklich Lassen Sie mich wissen, wenn Sie spezifischere statementen benötigen.