سؤال

يجب أن أقوم بتحويل Procs MSSQL المخزن الذي يمر varchar هذا هو الاستعلام:

INSERT INTO Results
  EXEC (@Expresion);

هذا لا يعمل. أنا متأكد جدا من أن EXEC و EXECUTE ليست أوامر mysql، ولكن CALL لا يعمل أيضا.

هل يعرف أحد إذا كان من الممكن أن يكون لديك شيء مثل JavaScript eval وظيفة ل mysql؟

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

المحلول

Execute هو أمر صالح في MySQL. MySQL دليل المراجع

نصائح أخرى

أعتقد أنك تبحث عن شيء مثل هذا:

SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
    SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM ( 
           SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9 
    ) as qwe 
) as www
);

PREPARE stmt FROM @queryString;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; 
SET @asd = NULL;

هذا هو ما يعادل SQL eval(my_string);:

@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;

في الأساس جمعت الإجابات الموجودة، لا يخبرك كيف تفعل التقييم بالضبط.


إذا كنت ترغب في إضافة معلمات، يمكنك استخدام هذا:

@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;

والإجابة على السؤال الأصلي بالضبط:

@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
  EXECUTE myquery;

نلاحظ أن PREPARE ... FROM بيان يريد متغير الجلسة (البادئة مع @). إذا حاولت تمرير متغير عادي، فسوف يرمي يديه في الهواء، بل إنه لن يهتم به.

ال EXECUTE لا يمكن استخدام أمر MySQL إلا في بيان واحد أعد.

إذا كانت الحالة التي ترغب في تنفيذ استعلامات متعددة من السلسلة، ففكر في توفيرها في ملف ومصدر، على سبيل المثال

SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top