MySQL + Dapper QueryMultiple: как выполнить несколько запросов SELECT одновременно? - PullRequest
2 голосов
/ 21 марта 2019

Мне трудно найти это в Интернете ...

Мне нужно выполнить команду QueryMultiple в Dapper + MySQL с запросом, который будет выглядетькак в SQL Server:

DECLARE @clientDomain VARCHAR(64) SET @clientDomain = 'some-domain';
DECLARE @sessionId VARCHAR(64) SET @sessionId = 'd09a8sd09a7g8gh';

SELECT *
FROM sessions.Sessions Sessions
WHERE Sessions.ClientDomain = @clientDomain AND Sessions.SessionId = @sessionId;

SELECT *
FROM sessions.PageVisits PageVisits
WHERE PageVisits.SessionClientDomain = @clientDomain AND PageVisits.SessionId = @sessionId

Конечно, @clientDomain и @sessionId будут правильно переданы как параметры запроса в методе QueryMultiple, но я пишу запрос в MySQL Workbench сначала, поэтому я объявил переменные там для разработки.

Моя проблема:

Я не могу заставить его работать в Workbench, и я полагаю,он также не будет работать в Dapper.

Примеры того, что я пробовал:

enter image description here

И с BEGIN /END:

enter image description here

Я прошел через это: https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-compound-statements.html и пытался вариации с метками, без меток и т. Д.

Примечание : я не хочу писать хранимую процедуру.Мой желаемый конечный результат - файл .sql, который я собираюсь включить в качестве встроенного ресурса в проект, а затем загрузить его из кода во время выполнения.

Я использую MySQL 5.6, Workbench Community 8.0.15.

Чего мне не хватает?


Решение:

После комментария Джейн ниже у меня есть две рабочие версии:

START TRANSACTION;
    SET @clientDomain = 'some-domain';
    SET @sessionId = 'd09a8sd09a7g8gh';

    SELECT *
    FROM sessions.Sessions Sessions
    WHERE Sessions.ClientDomain = @clientDomain AND Sessions.SessionId = @sessionId;

    SELECT *
    FROM sessions.PageVisits PageVisits
    WHERE PageVisits.SessionClientDomain = @clientDomain AND PageVisits.SessionId = @sessionId;
COMMIT;

И один с BEGIN;, но, как ни странно, без END; (если я попробую это, я получу сообщение об ошибке, указывающее мне искать документацию о том, как правильно написать оператор END):

BEGIN;
    SET @clientDomain = 'some-domain';
    SET @sessionId = 'd09a8sd09a7g8gh';

    SELECT *
    FROM sessions.Sessions Sessions
    WHERE Sessions.ClientDomain = @clientDomain AND Sessions.SessionId = @sessionId;

    SELECT *
    FROM sessions.PageVisits PageVisits
    WHERE PageVisits.SessionClientDomain = @clientDomain AND PageVisits.SessionId = @sessionId;

Я собираюсь с первым (START TRANSACTION) установить его как READ ONLY.

1 Ответ

2 голосов
/ 21 марта 2019

Я полагаю, что вы ищете START TRANSACTION

START TRANSACTION;

DECLARE @clientDomain VARCHAR(64) SET @clientDomain = 'some-domain';
DECLARE @sessionId VARCHAR(64) SET @sessionId = 'd09a8sd09a7g8gh';

SELECT *
FROM sessions.Sessions Sessions
WHERE Sessions.ClientDomain = @clientDomain AND Sessions.SessionId = @sessionId;

SELECT *
FROM sessions.PageVisits PageVisits
WHERE PageVisits.SessionClientDomain = @clientDomain AND PageVisits.SessionId = @sessionId

COMMIT;
...