سؤال

يمكنني استخدام Regex في بيانات SQL الخاصة بي للحصول على تطبيق يشبه ذلك

حدد * من الجدول حيث المعرف = {{{problyeme}}

ومع ذلك، في بعض الأحيان أنا لا أعطي معلمة لاستبدال تلك السلسلة مع. هل هناك طريقة لاستبدالها بشيء يطابق أي شيء. حاولت * ولكن هذا لا يعمل.

هل كانت مفيدة؟

المحلول

استبدال {{resulteme}} مع

[someValidValueForYouIdType] OR 1=1

نصائح أخرى

  1. SELECT * FROM table WHERE id = id سوف تتطابق مع جميع الصفوف التي لها غير فارغة id
  2. SELECT * FROM table WHERE id = id OR id IS NULL سوف تتطابق مع جميع الصفوف.

id ربما يكون مفتاح أساسي، حتى تتمكن من استخدام السابق.

يمكنني فقط وصف الحل الخاص بي مع مثال. ال @AllRec هي المعلمة:

Declare @AllRec bit
set @AllRec = {0|1}  --as appropriate

SELECT * 
FROM table 
WHERE 
   (
       id = {{REPLACEME}}
       and @AllRec = 0
   ) OR (
       @AllRec = 1
   )

في هذا الحل، إذا @AllRec هو 1 ثم يتم إرجاع كل شيء، وتجاهل id منقي. إذا @AllRec هو الصفر، ثم id يتم تطبيق مرشح وتحصل على صف واحد. يجب أن تكون قادرا على التكيف بسرعة إلى حل Regex الحالي.

باستخدام خيار Regex-Replace يفتحك حتى هجمات حقن SQL.

على افتراض أن لغتك لديها دعم للاستعلامات المعلمة، جرب هذا الإصدار المعدل من إجابة Jacob:

SELECT * FROM table WHERE (id = @id OR @id IS NULL)

الصيد هو أنه سيتعين عليك دائما تقديم القيمة @.

SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)

لست متأكدا من اللغة باستخدامك، وهذا الكود نوع من يخيفني ولكن ...


var statement = "SELECT * FROM table";

If REPLACEME is not empty Then
   statement += " WHERE id = {{REPLACEME}}"
End If


مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top