小编Sea*_*ham的帖子

SQL UPDATE WHERE IN(List)或UPDATE各自单独?

我最近正在努力寻找在SQL中运行某些查询的最佳方法,这些查询有可能以多种不同的方式完成.在我的研究中,我对WHERE IN概念产生了很多讨厌,因为它的工作原理固有的低效率.

例如: WHERE Col IN (val1, val2, val3)

在我当前的项目中,我正在对大量数据进行更新,并且我想知道以下哪个更有效:(或者是否存在更好的选项)

UPDATE table1 SET somecolumn = 'someVal' WHERE ID IN (id1, id2, id3 ....);
Run Code Online (Sandbox Code Playgroud)

在上面,ID的列表最多可达1.5k ID.

VS

循环遍历代码中的所有ID,并为每个ID运行以下语句:

UPDATE table1 SET somecolumn = 'someVal' WHERE ID = 'theID';
Run Code Online (Sandbox Code Playgroud)

对我自己而言,前者更好/更快地工作似乎更合乎逻辑,因为运行的查询更少.也就是说,我不是100%熟悉SQL的输入和输出以及查询排队的工作方式.

我还不确定在表锁和其他一般性能方面哪个数据库更友好.

一般信息,如果有帮助,我使用Microsoft SQL Server 2014,主要开发语言是C#.

任何帮助深表感谢.

编辑:

选项3:

UPDATE table1 SET somecolumn = 'someVal' WHERE ID IN (SELECT ID FROM @definedTable);
Run Code Online (Sandbox Code Playgroud)

在上面,@ defineTable是一个SQL'用户定义表类型',其中内部数据以(在C#中)类型SqlDbType.Structured进入存储过程.

人们正在询问ID是如何进入的:ID List<string>位于代码中,并且在用于代码中的其他内容之前被发送到存储过程.目前,ID作为"用户定义的表类型"进入存储过程,只有一列(ID).

我以为让他们在一个表中可能会比具有代码连接一个庞大的字符串,然后吐入SP的,看起来像一个变量更好id1, id2, id3, id4

sql sql-server

23
推荐指数
1
解决办法
6万
查看次数

SQL Deduplicate元组列表

我有一个包含两列ID的表,如下所示:

?????????????????
? Master ? Dupe ?
?????????????????
? 2      ? 7    ?
? 3      ? 6    ?
? 6      ? 7    ?
? 20     ? 25   ?
? 75     ? 25   ?
?????????????????
Run Code Online (Sandbox Code Playgroud)

每行代表sql表中两行的ID,这两行被认为是彼此重复的.

此表可以包含数千个条目,除了Master按照图中按升序排序的列之外,不保证数据.任何一列都可以包含与另一列相同的ID,可能针对不同或相同的合作伙伴ID.再次 - 没有保证.

从这张表中我想获得一个Master的索引及其所有可能的欺骗.如下图所示.

预期的结果:

  1. 最低ID应保留为主
  2. 所有随后的欺骗欺骗应该映射回相同(最低ID)的主人

对于上面的内容,所需的输出看起来像这样(但列不必排序):

?????????????????
? Master ? Dupe ?
?????????????????
? 2      ? 3    ?
? 2      ? 6    ?
? 2      ? 7    ?
? 20     ? 25   ?
? 20     ? 75   ?
?????????????????
Run Code Online (Sandbox Code Playgroud)

我发现很难解释这个问题所以我的谷歌搜索没有太多回复.我认为必须有一个算法来迭代这样的元组列表并发现重复.

任何帮助赞赏! …

sql sql-server recursion duplicates

6
推荐指数
1
解决办法
141
查看次数

参考C#'动态'对象的动态成员

我正在使用JSON.NET将JSON文件反序列化为dynamicC#中的对象.

在方法内部,我想传入一个string并引用动态对象中的指定属性.

例如:

public void Update(string Key, string Value)
    {
        File.Key = Value;
    }
Run Code Online (Sandbox Code Playgroud)

File动态对象在哪里,并且Key是传入的字符串.假设我想传入键"foo"和值"bar",我会这样做: Update("foo", "bar");但是由于dynamic对象类型的性质,这导致了

{
 "Key":"bar"
}
Run Code Online (Sandbox Code Playgroud)

相反:

{
 "foo":"bar"
}
Run Code Online (Sandbox Code Playgroud)

有可能用动态对象做我在这里问的问题吗?

c# dynamic json.net

5
推荐指数
1
解决办法
204
查看次数

实体框架和不同的环境(开发/生产)

我最近使用 ASP.NET MVC 进行了一个新项目,但我对这项技术并不十分熟悉。我仍处于早期阶段,即将开始自学如何使用实体框架来处理我的数据访问代码。我只是很难确定哪些软件/工具/功能可以做什么,但我认为我在 EF 上走在正确的轨道上。

我正在寻找能够看到我的本地数据库与我的生产数据库(架构,而不是其中的实际数据)中的差异的东西,并且能够将其发布到我们本地网络中的 SQL Server . 在我看来,我认为它就像数据库的 DVCS。

传统上(就像我所说的大多数)我会在我的代码或存储过程等中使用 SQL 编写我自己的数据访问代码,我会自己处理数据库方面的事情。不过,这对我来说不再是一种选择,因为我需要为开发和生产设置单独的环境,而且我真的没有时间也不想再手动编写所有这些代码。开发将位于开发机器的本地,生产将托管在我们本地网络的服务器上。

我最近开始使用 Visual Studio 中的“发布”功能,并且设法将其设置得非常好,将新版本发布到我的 IIS 服务器正在查看的目录中以提供站点。

我使用 Git 和 Sourcetree 来处理我的项目代码的 DVCS,但是我从来没有亲自使用或找到解决方案来为数据库做类似的事情。起初我以为我正在寻找某种适用于 SQL Server 的 DVCS,但并没有得到太多回报。本质上,我只想要某种工具来管理本地和生产数据库之间的版本差异,我认为这是 EF 可以为我做的事情。

对于数据库,我使用的是 SQL Server。我还没有为这个项目建立一个数据库,所以我认为代码优先的 EF 将是最好的方法。我想确保 EF 在 SQL Server 中使用数据库,我相信我可以通过指定要使用的连接字符串而不是 Visual Studio 中的连接字符串来设置。我偶尔需要通过 SSMS 进行数据库访问,因此我可以使用索引和备份计划,而我通常会通过 SSMS 进行这些操作,但我仍然希望 EF 为我完成大部分工作。

  1. 我可以按照我希望的方式使用 Entity Framework 实现我想要的目标吗?也就是说,有一个工具可以处理版本之间的数据库差异和更新?我不想弄清楚哪些表/列等。我已经在本地进行了更改,并且必须以某种方式将其处理到生产数据库中,但我也不希望生产数据库中的数据发生变化,只是结构体...
  2. 我希望任何人就如何构建此设置提供建议,或者甚至提供有关如何设置的教程的链接。我确信我不是第一个想要这样做的人,我知道我不会是最后一个。

本质上,我只想单击“发布”按钮,并将代码和数据库中的所有本地差异发布到生产服务器。

c# database sql-server asp.net-mvc entity-framework

5
推荐指数
1
解决办法
6326
查看次数