Questions tagged «sql-server»

SQL Server是Microsoft的关系数据库管理系统。

22
存储过程是全球最大的IT软件咨询公司之一的不良做法?
我在全球三大IT咨询公司之一的一个项目中工作,一名DBA告诉我,公司的最佳实践的状态存储过程不是“最佳实践”。这与我学到的一切都太相反了。 存储过程为您提供代码重用和封装(软件开发的两个支柱),安全性(您可以为单个存储的proc授予/撤消权限),保护您免受SQL注入攻击并还有助于提高速度(尽管DBA表示从SQL Server 2008开始,即使常规SQL查询运行了足够的时间,它们也会被编译。 我们正在使用敏捷软件开发方法开发复杂的应用程序。任何人都可以考虑为什么不想使用存储的proc的充分理由吗?我的猜测是,DBA不想维护那些存储的proc,但是似乎有太多负面因素无法证明这种设计决策是正确的。

3
创建数据库连接-一次还是为每个查询执行一次?
目前,当我的网页首次加载时,我创建了一个数据库连接。然后,我处理页面并针对该连接运行任何查询。这是最好的方法吗?还是应该在每次运行查询时都创建数据库连接? ps对我来说,创建1个连接并使用它更有意义,但我不知道这是否会引起任何其他问题。 我在MSSQL中使用C#(ASP.NET)。
101 c#  database  sql-server 

3
为什么在Microsoft SQL Server中我们需要在字符串前放置N?
我正在学习T-SQL。从我看到的示例中,要在varchar()单元格中插入文本,我只能编写要插入的字符串,但是对于nvarchar()单元格,每个示例都在字符串前加上字母N。 我在具有nvarchar()行的表上尝试了以下查询,并且工作正常,因此不需要前缀N: insert into [TableName] values ('Hello', 'World') 为什么在我看到的每个示例中,字符串都以N为前缀? 使用此前缀的利弊是什么?

10
使用GUID作为主键
我通常在数据库中使用自动增量ID作为主键。我正在尝试学习使用GUID的好处。我已经阅读了这篇文章:https : //betterexplained.com/articles/the-quick-guide-to-guids/ 我意识到这些GUID用于在应用程序级别识别对象。它们是否也作为主键存储在数据库级别。例如,假设我有以下课程: public class Person { public GUID ID; public string Name; .. //Person Methods follow } 假设我想在内存中创建一个新人员,然后将其插入数据库。我可以这样做吗? Person p1 = new Person(); p1.ID=GUID.NewGUID(); PersonRepository.Insert(p1); 假设我有一个包含数百万行的数据库,其中GUID作为主键。这将永远是独一无二的吗?我什至正确理解了GUID吗? 我之前读过这篇文章:http : //enterprisecraftsmanship.com/2014/11/15/cqs-with-database-generation-ids/。它似乎使我感到困惑,因为它似乎建议在GUID和整数之间作为主键使用快乐的介质。 编辑11/06/18 我已经相信Guid比int更适合我的要求。这些天来,我使用CQRS的次数更多,而GUID则更适合。 我确实注意到一些开发人员在域模型中将GUID建模为字符串,例如:https : //github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/ Buyer.cs-在这种情况下:IdentityGuid是一个建模为字符串的GUID。除了此处说明的内容外,是否还有其他理由:在分布式系统中使用自定义值对象或Guid作为实体标识符?。将GUID建模为字符串是“正常的”还是应该在模型和数据库中将其建模为GUID?

2
SQL Server中的NoSQL
这个问题与SQL和NoSQL之间的区别无关。我正在寻找一些目前对我来说实际上毫无意义的理由(可能是由于我缺乏理解或欣赏)。 我们从头开始使用MVC5,Entity Framework 6代码和SQL Server 2008开始了一个新项目。当架构师检查数据库架构时,声明应该删除所有外键和其他此类约束,因为这是“业务逻辑”,并且应该在应用程序代码的业务层中应用。 我的观点是,外键构成数据/引用完整性的一部分,并不能真正模仿业务逻辑。我将业务逻辑视为控制引用什么/何时/如何/为什么应用引用的过程和验证。我可以理解唯一的约束可以说是业务流程,但是对我而言,这只是逻辑的补充,并构成完整性的一部分。 第二个论点是目标是对数据采用NoSQL方法。我发现这确实是不寻常且不合常规的:考虑到使用SQL Server 2008,报告的需要,数据无法扩展到TB级以及缺乏对诸如Mongo,Raven等技术的考虑。 有人遇到过这种情况吗?为什么有人在为参考数据设计的SQL Server中采用NoSQL方法而不想要外键?
28 sql  sql-server  nosql 

1
JOIN vs.INNER JOIN和FULL OUTER JOIN
我知道INNER JOIN和之间有区别FULL OUTER JOIN,我可以看到,但是以下两个区别是什么:JOIN ... ON...和INNER JOIN...ON...和仍然JOIN...ON...vsFULL OUTER JOIN...ON... 原因是我认为也许只是在使用,JOIN正在搞乱我正在处理的查询,该查询已张贴在SO上,链接到此处的问题。 那么,实际设置操作本身之间的语法差异到底是什么? 谢谢,
27 sql  sql-server 

6
什么时候应该使用存储过程?
如果我将所有业务逻辑都包含在代码中并使用Entity Framework,那么在什么情况下(如果有),将某些业务逻辑移至存储过程中而不是将其全部保留在代码中会更好吗? 需要明确的是,我的意思是与当前设置(代码中的业务逻辑)结合使用,而不是与其结合使用。我已经看到了许多类似的问题,这些问题都要求在存储过程中拥有所有业务逻辑的利弊,但是对于保留少量使用边缘过程逻辑的同时保留其余业务逻辑的情况,我没有发现太多的益处在代码中。 如果有所作为,我正在使用MSSQL和Entity Framework。 在以下情况下,我曾使用过存储过程: 一份复杂的报告需要几分钟才能运行(这是Web应用程序中的页面)。我发现我可以编写比LINQ提供的SQL更有效的SQL(只需花费几秒钟即可运行)。 一个Web应用程序需要读写一个单独数据库中的几个表,其中包含许多其他与该应用程序无关的敏感信息。我没有给它访问所有内容的权限,而是使用了一个存储过程,该过程仅执行所需的操作,并且仅返回有限的信息。然后,可以只给Web应用程序访问此存储过程的权限,而不能访问任何表等。 在问这个问题之前,我查看了其他帖子: 存储过程是全球最大的IT软件咨询公司之一的不良做法? 在Web应用程序的存储过程中保存所有业务逻辑的利弊 /programming/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code /dba/2450/what-are-the-arguments-against-or-for-putting-application-logic-in-the-database/2452#2452 什么时候不使用ORM而更喜欢存储过程?

2
实施过滤搜索的最佳方法
我想问您,关于实施过滤后的搜索表单的意见。让我们想象以下情况: 1个有很多列的大表 可能很重要的一点是,此SQL Server 您需要实现一个表单来搜索此表中的数据,并且在此表单中,您将具有几个复选框,可用于汇总此搜索。 现在,我的问题是,以下哪一项应该是实现搜索的最佳方法? 创建一个内部带有查询的存储过程。此存储过程将检查应用程序是否提供了参数,如果未提供参数,则将在查询中放入通配符。 创建一个动态查询,该查询将根据应用程序给出的内容进行构建。 我之所以这样问,是因为我知道SQL Server在创建存储过程时会创建执行计划,以优化其性能,但是通过在存储过程内部创建动态查询,我们会牺牲执行计划获得的优化吗? 请告诉我,您认为最好的方法是什么。


5
SQL Server的版本控制
我正在开始一个新项目,并使用SVN(带有Tortoise)作为我的版本控制系统。我想知道是否有可能使用同一系统来维护SQL Server数据库。 我想对我的表/函数/视图/ procs / triggers / etc进行版本控制。但不是我的数据,因为无论如何它们都将是测试数据。我不太确定该如何设置。我遇到了一些选择,但我想知道是否缺少任何我,是否有指导或其他帮助我开始使用它的东西。 我已经听说过Red Gate,但我正在寻找免费的东西(或至少非常便宜的东西)。我知道我总是可以自己写点东西,但我并不是真的想花时间在上面。 我遇到的一件事是放在一起称为ScriptDB4Svn的开源软件包。有人使用过吗?好吗?它可以做我需要做的事情吗,设置起来很简单吗?

2
SQL Server和Mongo可以一起使用吗?
我们有一个大型的面向新闻的网站,具有很高的网络流量。该体系结构是您经常看到的DB-回购层-服务层-Asp.Net MVC。我们一直看到的问题与读取性能有关。事实证明,从理论上讲,所有这些DDD域对象对于业务规则来说都是很棒的,但是在优化读取性能方面却变得更加艰辛。 作为一种解决方案,我正在考虑(对我们而言)全新的事物:使用noSQL。我想使用noSQL数据库存储在我们网站上显示的数据。我们无法摆脱我们的SQL Server(至少不会很快),但是在我看来,一个实际可行的步骤是将Mongo用作所有新开发的查询数据库。 我的问题是,它是否可以使用SQL Server作为您的记录和蒙戈作为查询数据库的数据库一起? 因此,当我们的一位编辑者更新记录时,数据将存储在SQL Server中。这是必要的,因为有太多的遗留代码无法在一夜之间重写。 但是,当网站上的查看者查看文章或文章列表时,我想利用Mongo与SQL Server的性能。为了使数据保持最新状态(例如15分钟或更短),SQL Server数据将需要刷新Mongo。RDBMS具有用于此类操作的复制工具,我想知道是否存在从SQL Server到Mongo的相同操作。Lync服务器,也许吗?
14 sql-server  nosql  cqrs  mongo 


1
匹配数百万条记录的部分名称
我们已经开发了一个基于Web的名称匹配应用程序。它通过将名称分成多个部分进行操作,每个部分的Soundex值存储在数据库中。在莱文斯坦距离度量用于应用声音的百分比匹配以及拼写对一个给定的名称。 在运行时,我们将所有记录加载到内存中,并将Levenshtein距离应用于所有Soundex值以及所有名称的所有部分的拼写。 最初这样做很好,因为最多有2万个名称,但是现在我们的一位客户拥有3000万个名称。对于每个请求将巨大的列表加载到内存中并应用这种类型的匹配是一种可悲的方法,它占用了大量内存和执行时间。 我们正在寻找有关在不久的将来搜索声音和拼写百分比匹配的3000万条或更多记录的数据库的建议。 核心功能 最终用户输入要匹配的名称和最小百分比。我们应该在数据库中显示所有名称,其中名称的任何部分与给定名称的任何部分匹配到给定百分比。全名不需要匹配,只要匹配百分比最高就可以成功。例如。 Given Name: Helen Hunt Name in DB: Holly Hunter 两个名称的两个部分都不完全匹配,但在某种程度上不匹配,让我们假设80%,因此,如果用户输入80%,则DB中的名称必须显示为匹配名称。

3
通过频繁更改的架构使用Sql Server Change Data Capture
我们正在考虑为正在构建的新子系统启用Sql Server Change Data Capture。 这并不是真的因为我们需要它,而是因为我们具有完整的历史可追溯性而受到推动,而CDC会在我们的零件上花费最少的精力很好地解决此要求。 我们正在遵循一个敏捷的开发过程,在这种情况下,这意味着我们经常更改数据库架构,例如添加新列,将数据移动到其他列等。 我们做了一个小测试,创建了一个表,为该表启用了CDC,然后向该表中添加了新列。对新列的更改未在CDC表中注册。 是否存在将CDC表更新为新模式的机制,以及在迁移数据库模式时如何处理捕获的数据的最佳实践?

2
如何使用多个应用程序实例安全地运行数据库迁移?
我们有一个应用程序,它既有快速的迁移(<1秒)又有缓慢的数据库迁移(> 30秒)。现在,我们正在将数据库迁移作为CI的一部分来运行,但是我们的CI工具必须知道我们的应用程序(在多个环境中)的所有数据库连接字符串,这并不理想。我们希望更改此过程,以便应用程序在启动时运行自己的数据库迁移。 情况如下: 我们有此应用程序的多个实例-在生产中大约有5个实例。我们称他们为node1, ..., node5。每个应用程序都连接到一个SQL Server实例,并且我们不使用滚动部署(就我所知,所有应用程序都是同时部署的) 问题:说我们的迁移时间很长。在这种情况下,先node1启动,然后开始执行迁移。现在node4开始,并且长时间运行的迁移尚未完成,因此node4也开始运行迁移->可能的数据损坏?您将如何预防该问题,或者该问题甚至足够重要而值得担心? 我当时正在考虑使用分布式锁(使用etcd或类似的方法)解决此问题。基本上,所有应用程序都尝试获取锁,只有其中一个可以获取并运行迁移,然后解锁。当其余的应用程序启动并进入关键部分时,所有迁移都已运行,因此迁移脚本将退出。 但是,我的直觉是说:“这太过分了,必须有一个更简单的解决方案。”因此,我想问一下这里是否有其他更好的主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.