Мне трудно найти это в Интернете ...
Мне нужно выполнить команду 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.
Примеры того, что я пробовал:
И с BEGIN
/END
:
Я прошел через это: 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
.