我最近正在努力寻找在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等
我有一个包含两列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的索引及其所有可能的欺骗.如下图所示.
预期的结果:
对于上面的内容,所需的输出看起来像这样(但列不必排序):
?????????????????
? Master ? Dupe ?
?????????????????
? 2 ? 3 ?
? 2 ? 6 ?
? 2 ? 7 ?
? 20 ? 25 ?
? 20 ? 75 ?
?????????????????
Run Code Online (Sandbox Code Playgroud)
我发现很难解释这个问题所以我的谷歌搜索没有太多回复.我认为必须有一个算法来迭代这样的元组列表并发现重复.
任何帮助赞赏! …
我正在使用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)
有可能用动态对象做我在这里问的问题吗?
我最近使用 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 为我完成大部分工作。
本质上,我只想单击“发布”按钮,并将代码和数据库中的所有本地差异发布到生产服务器。
sql-server ×3
c# ×2
sql ×2
asp.net-mvc ×1
database ×1
duplicates ×1
dynamic ×1
json.net ×1
recursion ×1