Sehen Sie sich zunächst den folgenden logischen SQL-Anweisungsblock an:
DECLARE @fieldname varchar(50) DECLARE @fieldvalue nvarchar(100) SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传 SET @fieldvalue='Zuowenjun' IF @fieldname = 'chassisno' BEGIN SELECT * FROM TABLENAME WHERE chassisno=@fieldvalue END ELSE IF @fieldname = 'plateno' BEGIN SELECT * FROM TABLENAME WHERE plateno=@fieldvalue END ELSE IF @fieldname = 'owner' BEGIN SELECT * FROM TABLENAME WHERE [owner]=@fieldvalue END ELSE IF @fieldname = 'contacttelno' BEGIN SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue END ELSE BEGIN SELECT * FROM TABLENAME END
Wenn Sie nun eine SQL-Anweisung verwenden müssen, um die obige logische Beurteilung zu implementieren und die Ergebnisse abzufragen, können Sie über die Verwendung des folgenden Spleißens nachdenken Methode, um dies zu erreichen:
DECLARE @sqltext NVARCHAR(2000) SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +'''' EXECUTE (@sqltext)
Obwohl dies in der Lage zu sein scheint, logische Beurteilungen und Abfrageergebnisse zu erzielen, scheint es nicht intuitiv genug zu sein, Änderungen sind mühsam und fehleranfällig und weisen gewisse Einschränkungen auf, weil @fieldname ist hier dasselbe wie das Tabellenfeld, und das Zusammenfügen ist einfacher. Wenn die Umstände anders sind, ist es nicht möglich, daher habe ich hier nicht über die Effizienz gesprochen. Aber es ist auf jeden Fall einfach zu verwenden und flexibel genug. Bitte sehen Sie sich die folgende SQL-Anweisung an:
SELECT * FROM TABLENAME a WHERE 1=1 --(如果需要其它条件则用其它条件,否则可以这样或不要,如果不要则下面的第一个AND需去掉) AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>'chassisno') ) AND ((@fieldname = 'plateno' AND a.plateno=@fieldvalue) OR (@fieldname<>'plateno') ) AND ((@fieldname = 'owner' AND a.[owner]=@fieldvalue) OR (@fieldname<>'owner') ) AND ((@fieldname = 'contacttelno' AND b.contacttelno=@fieldvalue) OR (@fieldname<>'contacttelno') )
Es wurde überprüft, dass diese SQL-Anweisung logische Beurteilungen und Abfrageergebnisse realisieren kann, und zwar auch dann, wenn @fieldname anders ist Das Tabellenfeld können wir nun direkt durch das Prinzip ersetzen:
AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>' Fahrgestellnr') )
Da es sich um eine UND-Verknüpfung handelt, müssen die Bedingungen in den folgenden Klammern erfüllt sein, und da in den Klammern die ODER-Beziehung verwendet wird, können die Bedingungen auf beiden Seiten der Klammern eine von erfüllen Die Übersetzung lautet: Wenn @fieldname = 'chassisno', dann ist a.chassisno=@fieldvalue erforderlich. Andernfalls werden die vorherigen Zuordnungsbedingungen ignoriert. Beachten Sie, dass sich ihre Eigenschaften gegenseitig ausschließen, das heißt, die Bedingungen auf beiden Seiten von OR können nur eine davon erfüllen. Wenn Sie bessere Methoden oder unterschiedliche Meinungen haben, können Sie sich natürlich gerne austauschen und gemeinsam Fortschritte machen!