MySQL + Dapper 查询多个 : how to execute multiple SELECT queries at once?

标签 mysql mysql-workbench dapper

我很难在互联网上找到这个......

我需要在 Dapper + MySQL 中运行 QueryMultiple 命令,查询在 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并尝试带标签、不带标签等变化。

Note: I do not want to write a stored procedure. My desired end result is a .sql file that I'm going to include as an embeded resource in the project, and then load it from code at run time.

I'm using MySQL 5.6, Workbench Community 8.0.15.

我错过了什么?


解决方案:

在 Jane 发表以下评论后,我有两个工作版本:

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

最佳答案

我相信您正在寻找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;

关于MySQL + Dapper 查询多个 : how to execute multiple SELECT queries at once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55281461/

相关文章:

mysql - 为什么 MySQL Workbench 告诉我缺少分号?

mysql - 如果数据库中的数据发生更改怎么办,确定性关键字有什么作用?

c# - Dapper具体化为元组

python - pandas - 合并字符串列不起作用(错误?)

php - 多重连接 Laravel

python - 带有 Python 3.6 的 MYSQLdb

php - OJS - 文章表中 "status"属性的值

MYSQL 允许我在 PK 和 FK 中插入空值

c# - 为什么要在 Query 方法中添加 CommandType?

f# - F#中的Dapper点网查询