まず、次の SQL 論理ステートメント ブロックを見てください:
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
ここで、SQL ステートメントを使用して上記の論理判断を実装し、結果をクエリする必要がある場合は、次のスプライシング メソッドを使用してそれを実現することを検討してください:
DECLARE @sqltext NVARCHAR(2000) SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +'''' EXECUTE (@sqltext)
これは論理的な判断とクエリの結果が可能であるように見えますが、十分に直感的ではないようですが、変更は面倒でエラーが発生しやすく、いくつかの制限があります。なぜなら、ここでの @fieldname はテーブルのフィールドと同じであるため、結合は比較的簡単です。それらが同じでなければ、それは達成できません。そのため、ここでは効率については触れませんが、次の SQL ステートメントを参照してください。
この SQL 文は論理的な判断とクエリ結果を実現できることが確認されており、@fieldname がテーブルのフィールドと異なっていても、対応するフィールドを直接置換することもできます。 AND (( @fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@ fieldname<>'chassisno') )これは AND 関連付けであるため、次の括弧内の条件を満たす必要があり、OR 関連付けであるため、が括弧内で使用されている場合、@fieldname = 'chassisno' の場合、変換するには、@fieldname<> である限り、a.chassisno=@fieldvalue が必要です。 'chassisno'、以前の関連条件は無視されます。それらの特性は相互に排他的であることに注意してください。つまり、OR の両側の条件はどちらか一方のみを満たすことができます。もちろん、より良い方法や異なる意見がある場合は、交換を歓迎します。そして一緒に進歩していきましょう!