c# - 我需要在 SELECT 的结果中添加一个 tinyint 值

标签 c# mysql

我已经为这项任务苦恼了 2 天,但我真的找不到解决方案,因为我不是 MySQL 专家。所以基本上我有这个查询

sql.Append("select distinct ");
sql.Append(@"{0}.field1,
             {0}.field2,
             {0}.field3,
             {0}.field4, 
             {0}.field5, 
             ---
             ---
             false as customField1,
             false as customField2,
             {1}.name as customfield3
             from {0} join {1} on {0}.field2check = {1}.id where field2check = ?condition");

这是我在我的 C# 类中构建的选择文本。然后这个查询完成并提供给数据库,作为响应给我一个存储在 DataTable 中的表。我的问题是这个字段

false as customField1,
false as customField2,
{1}.name as customfield3

实际上是在评估条件后获得的,并且必须返回一个 tinyint(1) 以在我的 c# 代码中解释为 bool 值,因为 bool 类型在我的 sql 中不存在。如果我直接写 0 或 1,这个值将转换为 BIGINT,在 C# 中被解释为 Int32。

我知道我可以创建一个自定义函数来存储在我的数据库中

CREATE FUNCTION myDb.x_cast_to_tinyint(number bigint) RETURNS tinyint(1)
return number;

但这在我的情况下是被禁止的(我的老板根本不想在数据库中保存函数)。现在我想创建一个临时表来存储这个查询的结果,但问题是我不知道如何做。有点像

create temporary table myDB.res (customfield1 tinyint(1).... ) as (put the select here)

这里的问题是 2。首先我不知道如何定义这个表的所有列,因为它应该具有与现有表相同的结构加上 3 个自定义列。即使我成功创建了这张表,它还能持续多久?。我可以查询此表以从中选择 * 吗?

我也对其他解决方案持开放态度。如果您需要其他详细信息,请告诉我

编辑:忘记提及这一点。 c# 部分应该保持不变。我想为我的数据表的那些特定列制作一个转换器,但这个解决方案也收到了一个很大的回应(我在一定程度上对它很好,如果我的 c# 代码应该只代表数据,而不应该知道任何事情关于数据库的结构)

最佳答案

你可以尝试这样的事情,虽然我认为它比添加一个函数更复杂:

CREATE TEMPORARY TABLE myTempTable LIKE theFirstTable;
ALTER TABLE myTempTable 
    ADD COLUMN customField1 TINYINT(1),
    ADD COLUMN customField2 TINYINT(1),
    ADD COLUMN customField3 TINYINT(1);
INSERT INTO myTempTable 
    SELECT o.*, customField1, customField2, customField3
    FROM originalTable o...

显然,您必须根据需要自定义此方法,但优点是临时表将一直存在,直到连接关闭或您明确删除它。

关于c# - 我需要在 SELECT 的结果中添加一个 tinyint 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691726/

相关文章:

c# - 在 IQueryable<T> 上应用多个组函数

c# - RegEx 替换美元符号之间的文本

c# - 无法定义递归的扩展方法

c# - newid() 作为列默认值

c# - 为什么异步代码比同步代码慢这么多

mysql - 如何对 MySQL 过程进行故障排除 - 为什么循环达到最大运行次数?

C# 插入 MySQL 将 0 替换指定数据?

MySql:为不同顺序的单词选择不同

mysql - 水平合并2个表

PHP Diff 部分日期时间