我知道隐式类型转换不是一个好习惯。但当较低的值突然变得较高时,这确实是意想不到的行为。
declare @LastSelectedDate DATETIME = '2021-11-09 13:52:29.187'
declare @LastSelectedDate_1 DATETIME2(7) = '2021-11-09 13:52:29.1866667'
SELECT IIF(@LastSelectedDate_1 > CAST(@LastSelectedDate AS DATETIME2), 1, 0)
SELECT IIF(@LastSelectedDate_1 > @LastSelectedDate, 1, 0)
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我遗漏了什么?我正在使用 SQL Server 2016。
我得到了这样的错误:
正在恢复数据库“MyDb”。等待恢复完成。
那时我做了一个危急的手术。
造成这种情况的原因是什么?以及如何避免?
我知道我可以使用sys.fn_my_permissions以下方法查询有效权限:
USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name
------------------------------------------------
dbo.myTable | | SELECT
dbo.myTable | | UPDATE
...
Run Code Online (Sandbox Code Playgroud)
这告诉我当前用户myTable在数据库中是否具有 SELECT、INSERT、UPDATE 等权限myDatabase。
是否可以很容易地找出为什么用户拥有这些权限?例如,我希望有一个fn_my_permissions_ex输出附加reason列的函数:
USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
dbo.myTable | | SELECT | granted to database role public
dbo.myTable | | UPDATE | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
... …Run Code Online (Sandbox Code Playgroud) 是否可以使用 SSMS 连接到 DAC?如果我理解正确,应该可以在服务器名称前使用“admin:”前缀,但我收到以下消息:
SSMS 不支持专用管理员连接,因为它按照设计建立了多个连接。(Microsoft.SqlServer.Management.SqlStudio.Explorer)
在 SQL Server 2005 中,有没有办法找到在服务器级别不存在的用户(在服务器级别删除但在删除之前未与数据库解除关联的帐户)或未链接的帐户(帐户可能已在服务器级别而不是数据库级别被删除,然后重新读取但数据库级别从未被清理过)。
我有一个非常凌乱的服务器,如果可以运行查询来找到这些,那就太棒了。
你们可能知道,SQL Server 没有提供开箱即用的解决方案来导出为数据库中的每个元素声明的所有安全相关语句(在数据库级别和对象级别)
我说的是提供这些信息的能力
您可能会认为 SQL Server 必须有类似的东西,但 SQL Server 导出向导或因右键单击对象而生成的各种脚本都不会捕获此信息。
我在网上看到许多不同的“可能的解决方案”使用人们慷慨发布的非策划脚本,但由于我必须 100% 确定所有安全信息都被捕获,因此我不能完全依赖这些脚本。
我可以选择使用这些作为自己编写一些东西的起点,但我讨厌必须重新发明轮子来满足您认为很多人可能有的要求。
是否有人提供的工具(作为 SQL Server 产品的一部分或第三方工具)可以可靠地为您提供此信息?
或者至少,是否有大多数人会同意“将完成这项工作”的社区支持脚本?
谢谢!
我可以使用以下方法执行查询:
SELECT deqs.last_execution_time AS [Time]
,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
但我也在寻找username执行这些查询的列。
考虑以下查询,该查询仅在源表中不存在时才插入源表中的行:
INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK)
SELECT maybe_new_rows.ID
FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows
WHERE NOT EXISTS (
SELECT 1
FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween
WHERE maybe_new_rows.ID = halloween.ID
)
OPTION (MAXDOP 1, QUERYTRACEON 7470);
Run Code Online (Sandbox Code Playgroud)
一种可能的计划形状包括合并连接和急切线轴。Eager spool 运算符用于解决万圣节问题:
在我的机器上,上面的代码在大约 6900 毫秒内执行。用于创建表格的重现代码包含在问题的底部。如果我对性能不满意,我可能会尝试加载要插入到临时表中的行,而不是依赖于 Eager spool。这是一种可能的实现:
DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE;
CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE (
ID BIGINT,
PRIMARY KEY (ID)
);
INSERT INTO #CONSULTANT_RECOMMENDED_TEMP_TABLE WITH (TABLOCK)
SELECT maybe_new_rows.ID
FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows
WHERE NOT EXISTS (
SELECT 1
FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween
WHERE maybe_new_rows.ID = halloween.ID
)
OPTION …Run Code Online (Sandbox Code Playgroud) 我有以下输入:
id | value
----+-------
1 | 136
2 | NULL
3 | 650
4 | NULL
5 | NULL
6 | NULL
7 | 954
8 | NULL
9 | 104
10 | NULL
Run Code Online (Sandbox Code Playgroud)
我希望得到以下结果:
id | value
----+-------
1 | 136
2 | 136
3 | 650
4 | 650
5 | 650
6 | 650
7 | 954
8 | 954
9 | 104
10 | 104
Run Code Online (Sandbox Code Playgroud)
简单的解决方案是用<关系连接表,然后选择 a 中的MAX值GROUP BY: …