DBCC ShrinkDatabase()
DBCC ShrinkFile()
Run Code Online (Sandbox Code Playgroud)
SQL Server 2017 有几个新的存储过程:
以及 sys.messages 中的新条目:
我了解代理/人工密钥的一个好处 - 它们不会改变,而且非常方便。无论它们是单场还是多场,都是如此——只要它们是“人造的”。
但是,有时将自动递增的整数字段作为每个表的主键似乎是一个策略问题。拥有这样一个单字段键是否总是最好的主意,为什么(或为什么不)?
需要明确的是,这个问题不是关于人工 vs 自然的——而是关于是否所有人工键都应该是单字段的
我有一个非常简单的 MySQL 表,用于保存高分。它看起来像这样:
Id Name Score
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。问题是:我如何获得用户排名?例如,我有一个用户NameorId并且想要获得他的排名,其中所有行都按Score.
一个例子
Id Name Score
1 Ida 100
2 Boo 58
3 Lala 88
4 Bash 102
5 Assem 99
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Assem的排名将是 3,因为他获得了第三高的分数。
查询应返回一行,其中包含(仅)所需的排名。
将 SQL Server 和 Management Studio 从 2008 升级到 2012 后,Management Studio 2012 在打开新查询窗口和对话框时非常慢。
即使右键单击表格也很慢。在我开始在窗口内做任何事情之前,通常至少有 5 秒的延迟。每次都会发生这种情况,即使我连续两次打开同一个窗口。为什么会发生这种情况,我该如何解决?
其他应用程序非常快速地建立与数据库的连接。
我尝试过但没有帮助的事情:
hosts文件我的电脑应该足够快了,而且我还有 16GB 内存。我的硬件绝对不应该有问题。看起来 SSMS 正在等待某些东西 - 在发生这种情况时,我可以顺利运行其他程序。
我没有机会安装 SQL Server 2012 CU1 更新,因为安装修补程序似乎存在一些错误风险,我现在不能冒险。
过滤的列指示将由表条件过滤的表行的估计百分比。也就是说,rows 显示估计的检查行数,而 rows × filters / 100 显示将与先前表连接的行数。在 MySQL 5.7.3 之前,如果使用 EXPLAIN EXTENDED,则会显示此列。从 MySQL 5.7.3 开始,默认启用扩展输出,不需要 EXTENDED 关键字。
我还是不明白。这里的“过滤”是什么意思?我们可以从这个专栏中得到什么信息?
例如,当我开始查询时,有些查询会显示 100,而有些查询会显示 18 或任何低于 100 的值。
+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type | key | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY | a | range | search | 4 | 174 | 18.00 | <--
| PRIMARY | b | eq_ref | PRIMARY | 4 | 1 | 100.00 |
| PRIMARY | …Run Code Online (Sandbox Code Playgroud) SELECT
*,
p.name AS name,
p.image,
p.price,
(
SELECT ps.price
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS special_price,
(
SELECT ps.date
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS date
FROM product p LEFT JOIN product_special ps ON (p.id = ps.id)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我重复相同的子查询只是为了得到另一列。我想知道有没有更好的方法来做到这一点?
id是两个表中的主键。如果有帮助,我可以让product_special.priority变得独一无二。
我是一名报表开发人员,希望尽可能提高我的查询效率。我曾经与一位 DBA 一起工作,他告诉我 - 我相信是因为我总是在生产服务器上处理报告 -NOLOCK在每个查询中使用。
现在,我与一个NOLOCK在任何情况下都被禁止的 DBA 一起工作- 即使我的报告(由于几个表上缺乏索引)正在停止复制和系统更新。在我看来,在这种情况下,aNOLOCK将是一件好事。
由于我的大部分 SQL 培训都是来自不同意见的 DBA,因此我想向各种各样的 DBA 提出这个问题。
如果我需要将数据库从 SQL Server 2012(32 位)移动到 SQL Server 2005(64 位),我有哪些选择?
我知道我不能:
我知道我可以:
有没有更简单的选择?
一位客户报告说他们在 SQL Server 2012 上运行,我们在最终交付之前交付了一些测试查询以进行测试,但是:
“CONCAT”不是可识别的内置函数名称。
我知道这CONCAT()是 SQL Server 2012 中引入的一个新的内置函数,这一切都很好,但是我被要求回滚我的更改以使这个 2008R2 兼容,打着“执行查询的用户可能不具有要执行的 Transact-SQL 权限。” 所以我只是证明我的观点,客户端很可能在 DEV 中安装的 SQL Server 版本与在 PROD 中安装的版本不同。
我找不到任何关于专门拒绝SELECT/EXECUTE内置标量值函数的权限的信息,但是否有可能,如果是这样,用户是否仍会收到相同的错误文本?