2017-01-13 1 views
1

Q: Ich brauche Millionen von Parametern in WHERE wird genannt das Szenario unter IN-Klausel weitergeben müssen:WHERE IN-Klausel in SqlServer mit Millionen von Parametern - C#

Ich habe zwei Datenbankserver SourceDB-Server & DestinationDB-Server, ich muss Sync-Daten von SourceDB TO DestinationDB, so Abfrage ich bin Erzeugung dynamisch über C# -Code wird die endgültige Abfrage unten erwähnt:

SelectQuery = "SELECT 
[tbltest01details].[testdetailsid], 
[tbltest01details].[name], 
[tbltest01details].[testid] 
FROM 
    [SourceServer].[SourceDB].[dbo]. [tbltest01details] with (nolock)  
    WHERE 
    ( 
     [tbltest01details].[testid] 
     IN 
     (1,2,3.,.,.,......,80-million) 
    )"; 

WHERE IN-Klausel kann GUID oder Integer werden.

Above Abfrage wird auf Source durch folgenden Verfahren ausgeführt werden:

GetData(SourceConnectionString, SelectQuery, SourceTimeOut); 

Ich habe nur lesenden Zugriff auf SourceDB-Server, das heißt, ich habe nur SELECT-Abfrage zu erhalten Daten vom Server verwenden können..

HINWEIS:Einige schlagen vor, kann TEMPORARY Tabelle, aber ich kann nicht TEMPORARY Tabelle auf SourceDB-Server machen. Weil ich nur READ-Access auf SourceDB-Server habe.

+2

Was ist die Frage? – Brandon

+6

Millionen von Parametern? Überdenken Sie Ihren Ansatz –

+0

80mil?könnte auch 'Select * 'ohne Bedingung – Stephen

Antwort

1

Sie können nicht.

Aber Sie können eine SELECT in der IN Klausel

SELECT * FROM TABLE1 WHERE MYFK IN (SELECT ID FROM TABLE2) 

Oder ... verwenden, da Sie mit Millionen von Zeilen zu tun haben, können Sie nicht wählen sie einfach alle und dann diejenigen, die durch Anwendung benötigt filtern Code? Wenn Sie 80 Millionen Zeilen in einer 100 Millionen Zeilen großen Tabelle benötigen, ist dies möglicherweise der einfachste Ansatz. Wenn Ihr Tisch stattdessen 80 Milliarden Zeilen hat, ist es vielleicht kein guter Ansatz.

0

Wenn der [tbltest01details].[testid] tatsächlich nur ein numerischer Wert ist, für den Ihre Abfrage überprüft werden soll, können Sie verwenden. Wenn es sich um echte nicht-numerische Parameter handelt, gibt es buchstäblich keine praktikable Möglichkeit für Sie, das zu tun, was Sie erreichen möchten, und Sie müssen überdenken, was Sie tatsächlich tun.

dh

SelectQuery = "SELECT 
[tbltest01details].[testdetailsid], 
[tbltest01details].[name], 
[tbltest01details].[testid] 
FROM 
[SourceServer].[SourceDB].[dbo]. [tbltest01details] with (nolock)  
WHERE 
( 
    [tbltest01details].[testid] 
    BETWEEN 1 AND 80000000 
)"; 
+0

Wenn ** [tbltest01details]. [Testid] ** ist GUID dann? –

+3

@IrfanHabib Dann ist es wahrscheinlich eine gute Idee, die richtigen Details in die Frage zu stellen. – Lamak

0

Nur wenige Lösungen für die Frage gestellt:

In Kombination von beliebigen von diesen importieren Führen Sie eine regelmäßige Verknüpfung mit den Daten durch, die Sie extrahieren möchten.

Verwandte Themen