文档坚持认为这ISNULL
是一个函数,但COALESCE
事实并非如此。具体来说,他们说
ISNULL 函数和 COALESCE 表达式
如果我戴上 Lisp 帽子,我可以将其视为COALESCE
一个宏,并且一切都有意义。然而,我在 T-SQL 中从来不需要这样的思考。所以,我必须问。在 T-SQL 中:
- 函数的定义是什么?
- 表达式的定义是什么?
- 如何区分函数和表达式?
PieCloudDB数据库有没有办法根据开始时间和结束时间(以天为单位)将一条数据分成多条数据。例如:
ID | 价值 | 开始日期 | 结束日期 |
---|---|---|---|
1 | ABC | 2024-01-29 | 2024-02-01 |
2 | XYZ | 2024-02-28 | 2024-03-01 |
输出:
ID | 价值 | 分割日期 |
---|---|---|
1 | ABC | 2024-01-29 |
1 | ABC | 2024-01-30 |
1 | ABC | 2024-01-31 |
1 | ABC | 2024-02-01 |
2 | XYZ | 2024-02-28 |
2 | XYZ | 2024-02-29 |
2 | XYZ | 2024-03-01 |
如果您不了解 PieCloudDB,可以使用 PostgreSQL 作为测试数据库。
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=1.711..1.712 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=1.564..1.591 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.483..1.454 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.017..0.018 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.240..0.994 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on * (cost=0.00..69.57 rows=6018 width=0) (actual time=0.224..0.224 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.697 ms
**Execution Time: 1.766 ms**
(17 rows)
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=0.897..0.898 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=0.795..0.831 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.178..0.718 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.004..0.005 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.081..0.457 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on * (cost=0.00..69.57 rows=6018 width=0) (actual time=0.073..0.073 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.336 ms
**Execution Time: 0.929 ms**
(17 rows)
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=0.873..0.873 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=0.794..0.813 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.168..0.717 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.004..0.004 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.071..0.457 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on *
(cost=0.00..69.57 rows=6018 width=0) (actual time=0.063..0.063 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.304 ms
**Execution Time: 0.903 ms**
(17 rows)
\---------------------------------------------------------------------------------------------------------------
Time (mean ± σ): **98.1 ms** ± 28.1 ms \[User: 30.7 ms, System: 11.1 ms\]Range (min … max): 75.6 ms … 129.5 ms 3 runs
\---------------------------------------------------------------------------------------------------------------
我正在使用 hyperfine 对 PostgreSQL 中的查询性能进行基准测试。我使用--runs 3
选项运行了三遍。正如您所看到的,我运行查询的所有 3 次的执行时间分别花费了 1.766、0.929 和 0.903 毫秒。我的问题是,为什么平均值 = 98.1 毫秒?这句话代表什么意思呢?因为执行时间在 0.9 ms - 1.7 ms 之间是没有任何意义的,而它们的平均值是 98.1 ms。我测试在 Postico 中执行相同的查询,花费了 0.903 毫秒。我只是好奇如果平均值不代表执行平均时间,它代表什么。
我想查找 Azure SQL MI 中每个数据库的总已用空间和剩余空间。
为此,在示例中,当我右键单击数据库并选择属性时,我会看到以下示例输出,其中总大小应约为 365 GB:
data_size log_size total_size
TEST_DB 355.69042968750 1.31347656250 357.00390625000
当我运行以下脚本获取数据库中所有表的大小时,表总和约为 500MB,我不知道剩余的 364.5 GB 去哪儿了。
另外,当我再次运行以下解决方案的脚本(https://dba.stackexchange.com/a/339009/289736)时,我看到的数据大小与大约 765MB 左右的数据大小相比要小得多:
我迷失了获取数据库大小的正确方法,因为不同的方法显示不同的大小。如果分配的大小和使用的大小之间存在巨大差距,那么差距从哪里产生?
我设置了一个 SQL Server 分布式可用性组,并且当前已连接到转发器实例。我想知道如何使用 T-SQL 查询适当的 DMV 或目录视图,以确定当前哪个实例充当分布式可用性组中的全局主实例。
我正在寻找可以在转发器实例上执行的 T-SQL 脚本或查询来检索此信息。
任何有关此主题的帮助或指导将不胜感激。先感谢您!
我正在SQL Server Analysis Service 上执行一些DMV 查询SELECT * FROM $system.DISCOVER_SESSIONS
,例如. 此查询将返回服务器上所有数据库的数据,因此它并不是真正特定于数据库的。当我通过AdomdConnection连接到服务器时,我没有在连接字符串中指定数据库/目录,并且查询仍然有效。但是我注意到数据库始终与此连接相关联,并且它通常是服务器上可用数据库列表中的第一个数据库。
我的问题是
可能更简短的表述方式是: DMV 查询的性能影响与服务器相关还是与数据库相关?
以下答案(对所有数据库中的所有表执行“sp_spaceused”)对sp_spaceused
所有数据库中的所有表执行解决方案。
相反,我只能对所有数据库执行它吗?
我可以使用以下脚本查看所有数据库的结果,但如果可能的话,我想在单个 Excel 表中查看结果,如链接的答案:
DECLARE @DatabaseName NVARCHAR(255)
DECLARE @SqlQuery NVARCHAR(MAX)
-- Declare a cursor to loop through all databases
DECLARE database_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE' -- Filter out offline databases if needed
-- Open the cursor
OPEN database_cursor
-- Fetch the first database name from the cursor
FETCH NEXT FROM database_cursor INTO @DatabaseName
-- Start looping through all databases
WHILE @@FETCH_STATUS = 0
BEGIN
-- Build the dynamic SQL query to switch database context and execute the query
SET @SqlQuery = 'USE [' + @DatabaseName + ']; EXEC sp_spaceused @oneresultset = 1'
-- Execute the dynamic SQL query
EXEC sp_executesql @SqlQuery
-- Fetch the next database name from the cursor
FETCH NEXT FROM database_cursor INTO @DatabaseName
END
-- Close and deallocate the cursor
CLOSE database_cursor
DEALLOCATE database_cursor
示例 excel-view 输出,我可以轻松复制所有行并将其作为整体粘贴到 excel 文件中:
请教三个问题:
我们能否拥有跨 3 个 WSFC 集群(即跨越 3 个 AG)的单个 DAG?
如果是这样,是否可以对其进行配置,使两个 AG 位于同一 Active Directory 域中,而第三个 AG 位于不同的 AD 域中?
如果不建议跨 3 个 AG 配置单个 DAG,是否可以跨两个不同 AD 域中的两个 AG 配置一个 DAG?
谢谢
当 MySQL (InnoDB) 将整个表缓存到内存中并且该表中的一行或多行发生更改时,它会做什么?
在这种情况下,MySQL是否会修改内存中的缓存,还是会认为缓存脏,转储缓存的表数据,然后在下次查询时重新缓存该表?
我有一个来自 PostgreSQL 15 的备份,我正在尝试将其导入到 PostgreSQL 16 中。版本之间的重大更改之一是“限制 CREATEROLE 的权限及其修改其他角色的能力”
以前,具有 CREATEROLE 权限的角色可以更改任何非超级用户角色的许多方面。此类更改(包括添加成员)现在要求请求更改的角色具有 ADMIN OPTION 权限。
这意味着以前的数据库转储有角色授予命令抛出错误。sql 是通过以下方式获得的pg_dumpall --roles-only
(--no-owner
没有效果):
GRANT role TO user1 GRANTED BY user0;
ERROR: permission denied to grant privileges as role "user0"
DETAIL: The grantor must have the ADMIN option on role "role".
我尝试过使用管理员授予角色,这样当我们将来尝试授予角色时就不会出现此问题,但它会使命令乱序,因此它们在恢复时仍然失败:
GRANT role TO user1 GRANTED BY user0;
GRANT role TO user2 GRANTED BY user0;
GRANT role TO user3 GRANTED BY user0;
GRANT role TO user0 WITH ADMIN OPTION GRANTED BY [me];
GRANTED BY
除了梳理 PostgreSQL 15 中的权限以便导入时没有问题之外,还有什么方法可以省略命令中的 或任何其他方法来解决此问题?
编辑:user0 已经是超级用户