标签: sql-server

在 SQL 中使用替换

我有一张桌子,我需要更新一些名字,但我想知道

以下查询:

两者都会这样做吗?

查询1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')
Run Code Online (Sandbox Code Playgroud)

查询2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Run Code Online (Sandbox Code Playgroud)

sql-server

13
推荐指数
2
解决办法
1093
查看次数

具有 SQL Server 2016、Shard 的多租户系统是否应该通过每个租户的单独数据库进行租户隔离?

鉴于用例:

  • 租户数据不应串扰,一个租户不需要另一个租户的数据。
  • 每个租户都可能拥有大量的历史数据。
  • SQL Server 托管在 AWS EC2 实例中。
  • 每个租户在地理上都很遥远。
  • 有意向使用第三方可视化工具,如 PowerBI Embedded
  • 数据量预计会随着时间的推移而增长
  • 系统的成本受到限制。
  • 解决方案必须是可维护的,无需 24/7 全天候生产 DBA
  • 该解决方案应该能够水平扩展。
  • 租户总数少于50人

推荐的架构是什么,此用例是否有任何参考实现?我相信很多人可能已经在企业软件开发中遇到过这个问题。

我认为这与在多租户数据库架构中处理越来越多的租户不同。该问题中提到的用例涉及更多租户,这与拥有很少 (50) 个大租户有很大不同。提到的架构可能是这里的一个解决方案,这也是我想了解的更多信息。

database-design sql-server scalability multi-tenant sharding

13
推荐指数
3
解决办法
9066
查看次数

主数据库已损坏,实例无法启动 - 我有哪些选择?

帮助!我的主数据库损坏了,我什至无法使 SQL 实例联机!我有哪些选项可以让我的服务器备份?

我确实有 master 的备份,但是MSDN 页面“恢复 master 数据库”要求我以单用户模式启动实例,我做不到!

(注意:我不指定 SQL 版本的这个问题,以便作为更广泛适用的参考。在 DBA.SE 上有一些类似的问题,但没有涉及服务器无法启动的问题。)

sql-server corruption master-system-database

13
推荐指数
1
解决办法
3万
查看次数

驱动器与安装点?

以前的高级 DBA 为我们整个公司的每个 SQL Server 中的所有驱动器设置了挂载点。新的高级 DBA被挂载点吓坏了想改变我们的标准(我认为主要是因为他没有使用它们的经验)。

根据大量 Internet 搜索的结果,我找不到任何(SQL Server 2000 后)不使用挂载点的理由。

有没有人知道有关此主题的 Windows 操作系统限制?

  • 我最近经常听到“操作系统无法识别挂载点”的说法。(不真实,基于我对我们使用的 Windows Server 版本的研究)。

是否有任何基于证据或经验的理由不将挂载点与 SQL Server 一起使用?

  • 假设用完驱动器号对我们来说不是问题。

我的理解是挂载点对于隔离工作负载非常有用。

任何人都可以确认或反驳我的理解,挂载点实际上比一个驱动器更有效地隔离/隔离不同类型的数据和日志文件(系统数据库文件、用户数据库文件、tempDB)的数据文件、日志文件和 tempdb ?

sql-server storage architecture mount-point

13
推荐指数
3
解决办法
9216
查看次数

Perfmon 计数器“次优计划/秒”实际衡量的是什么?

在 SQL Server 中,Perfmon 计数器“工作负载组统计:次优计划/秒”衡量什么?

它是资源调控器计数器之一,因此它是在工作负载组(无论是否配置 RG 都具有)进行测量的。

我不是在问什么是好的计划或坏的计划,而是具体的对策是什么,你去哪里找到准确的相应计划?例如,我在扩展事件中找不到任何与触发“次优计划/秒”计数器的查询相匹配的内容。

sql-server

13
推荐指数
1
解决办法
428
查看次数

为什么删除外键需要很长时间?

我制作了一个脚本,一次一个,从数据库中删除所有外键,就像这样:

ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1
ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1
ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2
Run Code Online (Sandbox Code Playgroud)

让我感到惊讶的是脚本需要很长时间:平均每个 DROP FK 需要 20 秒。现在,我明白创建 FK 可能是一件大事,因为服务器必须去检查 FK 约束是否从一开始就没有被侵犯,而是下降了?当丢弃需要这么长时间的 FK 时,服务器会做什么?这既是为了我自己的好奇心,也是为了了解是否有办法让事情变得更快。能够删除 FK(不仅仅是禁用它们)将使我在迁移过程中更快,从而最大限度地减少停机时间。

foreign-key sql-server sql-server-2016

13
推荐指数
2
解决办法
7160
查看次数

SQL Server 2016 中空间数据的 MakeValid() 替代方法

我有一个非常大的地理LINESTRING数据表,我要从 Oracle 移动到 SQL Server。在 Oracle 中有许多针对此数据执行的评估,并且它们也需要针对 SQL Server 中的数据执行。

问题:SQL Server 对有效的要求LINESTRING比 Oracle更严格;“LineString 实例不能在两个或多个连续点的间隔内重叠”。 碰巧我们的LINESTRINGs的百分比不符合该标准,这意味着我们需要评估数据的函数失败。我需要调整数据,以便它可以在 SQL Server 中成功验证。

例如:

验证一个非常简单的LINESTRING自我加倍:

select geography::STGeomFromText(
    'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed()
Run Code Online (Sandbox Code Playgroud)
24413: Not valid because of two overlapping edges in curve (1).
Run Code Online (Sandbox Code Playgroud)

MakeValid针对它执行函数:

select geography::STGeomFromText(
    'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).MakeValid().STAsText()
Run Code Online (Sandbox Code Playgroud)
LINESTRING (0 -0.999999999999867, 0 0, 0 0.999999999999867)
Run Code Online (Sandbox Code Playgroud)

不幸的是,该MakeValid函数更改了点的顺序并删除了第三维,这使我们无法使用它。我正在寻找另一种无需重新排序或删除第三维即可解决此问题的方法。

有任何想法吗?

我的实际数据包含数百/数千个点。

sql-server spatial sql-server-2016

13
推荐指数
1
解决办法
3648
查看次数

了解 varchar(max) 8000 列以及为什么我可以在其中存储超过 8000 个字符

从这个微软文档,+

n 定义字符串长度,可以是 1 到 8,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。存储大小为输入数据的实际长度+2 个字节。

请帮助我理解这一点。

varchar 的最大字符数似乎是8000,这远低于2GB数据的价值。

我看到在varchar(max)特定表的这一列中有len(mycolumn)> 100 000 的记录。因此我知道我可以8000在varchar(max)列中输入更多字符。

问题 1:8000角色是如何发挥作用的,我应该在哪里知道它?

问题 2: .net datareader 查询此列是否总是返回包含 100 000+ 个字符的完整结果?

sql-server varchar max

13
推荐指数
2
解决办法
2万
查看次数

克服 LIKE 字符长度限制

通过在此处阅读此LIKE 字符长度限制,看起来我无法在 LIKE 子句中发送超过 ~4000 个字符的文本。

我正在尝试从特定查询的查询计划缓存中获取查询计划。

SELECT *
FROM sys.dm_exec_cached_plans AS cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp 
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
where st.text like '%MY_QUERY_LONGER_THAN_4000_CHARS%' ESCAPE '?'
Run Code Online (Sandbox Code Playgroud)

如果里面的查询LIKE超过 4000 个字符,那么即使我的查询在缓存计划中,我也会得到 0 个结果。(我期待至少有一个错误)。

有没有办法解决这个问题或采取不同的方式?我有可能是 >10000字符长的查询,看起来我无法通过LIKE.

sql-server t-sql like sql-server-2016

13
推荐指数
1
解决办法
945
查看次数

每小时在 MS SQL Studio 中自动执行查询

我在一家大企业中支持一个应用程序,我的职责之一是清理数据。我需要每小时执行一个查询,我想自动化它。由于组织政策,我无法创建 SQL Server 代理作业或修改架构,我只能操作数据。

无尽的

WHILE(1=1)
BEGIN 
WAITFOR DELAY '01:00';
--do work
END
Run Code Online (Sandbox Code Playgroud)

为我完成这项工作,但我对永久开放连接的想法不屑一顾。

理想情况下,我会编写 MS SS 本身的脚本以每小时执行一段给定的代码,但我不确定这是否可行。

这个问题有什么解决办法吗?

sql-server scheduled-tasks

13
推荐指数
2
解决办法
2万
查看次数