سؤال

أنا جديد في Firebird ، وأواجه صعوبة خاصة في ترجمة T-SQL إلى Firebird SQL. يتم تخزين هذا الرمز خارج قاعدة البيانات ، وليس في إجراء مخزن.

DECLARE @NumTotal int
DECLARE @NumUsed int

SELECT @NumTotal = COUNT(*)
    FROM "some_Table"
    WHERE "CreatedOn"=@CreatedOn

SELECT @NumUsed = COUNT(*)
    FROM "some_Table"
    WHERE "CreatedOn"=@CreatedOn AND "UserID" IS NOT NULL

SELECT @NumUsed AS "NumUsed", @NumTotal AS "NumTotal"

أظن من الأخطاء وتجربتي أنني أجبرت بشكل أساسي على وضع هذا في إجراء مخزن بطريقة أو بأخرى. هل هناك طريقة يمكنني القيام بذلك مع الحفاظ على الكود خارج قاعدة البيانات؟

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

المحلول

يمكن تبسيط الكود الخاص بك إلى استعلام واحد:

SELECT COUNT(*) AS numTotal,
       (SELECT COUNT(*)
          FROM YOUR_TABLE
         WHERE userid IS NOT NULL
           AND createdon = @createdon) AS numUsed
  FROM YOUR_TABLE
 WHERE createdon = @createdon

استخدام عروض الأسعار المزدوجة هو ANSI للهروب من الشخصيات غير العادية ، لا شيء أراه في المثال.

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