Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。


2
更好的“喜欢,喜欢,喜欢,喜欢,喜欢”的方法
在这个问题上,他和我有同样的问题。我需要类似的东西: select * from blablabla where product like '%rock%' or like '%paper%' or like '%scisor%' or like '%car%' or like '%pasta%' 这很丑陋,并且没有使用索引。在这种情况下,这实际上是唯一的方法(在字符串中选择多个单词),还是应该使用FULLTEXT? 据我了解,全文可以在字符串中选择多个单词。 这个问题也涉及全文

2
标志与表拆分
我正在设计一个项目表,该项目表(可能)包含数千万条记录。某些项目只有在管理员“批准”之后才能使用。“使用”是指在“批准”之前不会在其他任何表中引用这些项目。在任何给定时间,多达50%的商品可能会被“未批准”。记录可能会被“批准”,但反之则不然。 我考虑两个设计选项: 一点标志 单独的“未批准”项目表-批准项目后,将其移至“常规”表(项目ID的更新不是问题) 我认为第二个选择要好得多。位标志每行仅占用一个字节,因此这不是问题。但是,如果我们在同一张表中有100万个批准的记录和100万个未批准的记录,则具有批准记录的操作的扫描时间会增加。 问题是:我应该考虑使用第一个(位标志)选项吗?在描述的情况下有什么好处吗?

4
DELETE语句与REFERENCE约束冲突
我的情况如下所示: 表STOCK_ARTICLES: ID *[PK]* OTHER_DB_ID ITEM_NAME 表格位置: ID *[PK]* LOCATION_NAME 表WORK_PLACE: ID *[PK]* WORKPLACE_NAME 表INVENTORY_ITEMS: ID *[PK]* ITEM_NAME STOCK_ARTICLE *[FK]* LOCATION *[FK]* WORK_PLACE *[FK]* 显然,INVENTORY_ITEMS中的3个FK引用了其他表中的“ ID”列。 此处的相关表是STOCK_ARTICLE和INVENTORY_ITEMS。 现在有一个SQL作业,包含几个步骤(SQL脚本),这些步骤将上述数据库与另一个数据库(OTHER_DB)“同步” 。此作业中的步骤之一是“清理”。它会从STOCK_ITEMS中删除所有记录,而另一个数据库中没有对应的具有相同ID的记录。看起来像这样: DELETE FROM STOCK_ARTICLES WHERE NOT EXISTS (SELECT OTHER_DB_ID FROM [OTHER_DB].[dbo].[OtherTable] AS other WHERE other.ObjectID = STOCK_ARTICLES.OTHER_DB_ID) 但是此步骤始终失败: DELETE语句与REFERENCE约束“ FK_INVENTORY_ITEMS_STOCK_ARTICLES”冲突。数据库“ FIRST_DB”的表“ dbo.INVENTORY_ITEMS”的列“ …

5
给定范围内的质数
最近,我被赋予打印所有质数(1-100)的任务。我在那里彻底失败了。我的代码: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 尽管我最终没有完成它,但我想知道在数据库(SQL Server 2008 R2)上执行这样的程序是否可行。 如果是,它将如何结束。

2
选择满足组条件的行(无临时表)
该表具有3列: ID category flag 1 A 1 2 A 0 3 A 0 4 B 0 5 C 0 我想选择flag = 1每个类别至少具有一次的所有行。 预期成绩: ID category flag 1 A 1 2 A 0 3 A 0 可以使用如下临时表来解决: select ID into #tempTable from someTable where flag = 1 select * from someTable …


1
聚簇索引查找和非聚簇索引查找之间的区别
聚集索引(CI)搜索和非聚集索引(NCI)搜索之间有什么区别?一个人比另一个人表现更好吗? 我之所以这样问,是因为我有一个具有5000万行和150列的表。它有一列名为ID定义为聚簇索引的列。还有一个具有相同索引键ID和七个include-d列的NCI 。在我看来,NC索引在这里是重复的,可以安全地删除。 因此,我想获得一些专家意见/建议,以确保可以安全地放下它或保持其完好无损?

1
如何降低SQL Server中的HEAP碎片?
我最近发现,一个堆表的碎片超过70%。所以我决定做一个 ALTER TABLE dbo.myTable REBUILD 有趣的是,事后我有20%的支离破碎。从那以后,在那张桌子上没有写任何东西。因此,我决定再进行一次重建。 第二次后,桌子上的帽子碎裂了50%,甚至更多! 我真的不明白怎么会这样...


1
HADR高工作线程使用率
为什么HADR池中的可用性组的工作线程数会大大增加,而不是每个副本“ 通常有3–10个共享线程 ”的最低使用量? 在一种情况下,我们观察到300个线程的使用情况,其中包含3个可用性组和10个数据库。SQL Server 2014 SP1。 我们的潜在客户包括辅助副本上的备份,主副本上的高活动性,辅助副本上的报告。 AG位于VMware的数据中心中。总共16个调度程序,通常的工作线程在200个范围内。服务器上的max_dop为2。 3个AG,10个DB,每个4个副本-主,2个只读,1个不可读。 1个辅助同步,2个异步 大型多主机群集上的32个物理核心上有16个vcore。 没有多余的准备。 其他较小的VM 4-8内核位于同一位置,但不会按CPU 我们观察到工作线程数量激增,导致拒绝服务。我们假设工作线程归因于AG,因为只有那些工作线程才能超过限制。 在上下文中阅读的来自SQL Server Premier现场工程师博客的以下链接没有给我完整的答案: 监视SQL Server 2012 AlwaysOn可用性组工作线程消耗 我的实际工作线程是否超出了sp_configure“最大工作线程”值?

3
将多个数据库备份到同一时间点
通常,当我们开始备份时,我们不允许提交更改,否则将无法访问数据库。我的意思是数据库将处于单用户模式,但是我想开始备份并释放数据库以供使用。另外,一旦开始备份,我就不想将正在进行的更改写入备份文件。我想知道如何在Microsoft SQL Server 2012中实现此目标。请帮助我。 好吧,让我先解释我的问题。目前,我正在将数据库设置为单用户模式,直到备份完成。我的目的是为了避免备份过程中的数据更改。但是我的应用程序与多个数据库绑定在一起(每个数据库相互链接,并且有var dbs不断按月创建)。因此,备份所有这些数据库已成为一个繁琐的过程,更重要的是,在备份过程中,我必须将用户排除在系统之外。 因此,我正在寻找可以满足以下要求的备份机制。 一次启动所有数据库的备份,然后释放该数据库以供使用。 由于数据库相互链接,因此我希望在备份文件中保持数据一致性。因此,由于这种数据一致性要求,我不想将正在进行的更改提交到备份文件中。 我想要的是-在给定时间备份所有数据库。


1
在PowerShell中通过SQLCMD连接到LocalDB
我正在尝试使用SQLCMD实用程序通过PowerShell访问计算机上的“ localdb \ MSSQLLocalDB”服务器。我正在使用PowerShell v5,.NET v5.0,并且服务器名称是(localdb)\MSSQLLocalDB在Microsoft SQL Server Management Studio 2014中连接到服务器时的名称。 PS C:\> sqlcmd -S localdb\MSSQLLocalDB并PS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误: Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序11:SQL Server网络接口:查找指定的[xFFFFFFFF]服务器/实例时出错。 我在Management Studio中查询了服务器名称,SELECT @@ServerName并-S在上述命令中使用了该名称,并得到了相同的错误。 PS C:\> sqlcmd -S localdb 给出此错误: Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序11:命名管道提供程序:无法打开与SQL Server的连接[53] 其他说明:我可以使用以下连接字符串连接到服务器并在C#控制台应用程序中使用名为testdb01的数据库进行工作System.Data.SqlClient: "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"


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.