标签: sql-server

查找用户已明确授予对象权限的所有实例

是否可以为某个用户生成用户已获得显式访问权限的对象列表?

我想查看用户拥有明确权限的所有项目的列表,不包括通过角色等继承的任何权限。

sql-server permissions sql-server-2014

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

我们如何获得两个日期时间之间的小时、分钟和秒差异?

table任务有列如下:

Task(TaskID, TaskName, CreatedDate)
Run Code Online (Sandbox Code Playgroud)

并希望根据日期时间差异执行代码块:

如果任务 CreatedDate 已过去 15 分钟 THEN

执行块#01

否则,如果任务 CreatedDate 还没有超过 15 分钟,那么

执行块#02

我测试了下面的查询,但它给出的结果为 61633440

SELECT DATEDIFF(MINUTE, CONVERT(VARCHAR(10), CreatedDate, 108), CURRENT_TIMESTAMP) AS MinuteDiff
Run Code Online (Sandbox Code Playgroud)

我们如何在 sql 中实现上述目标?

sql-server sql-server-2012 datetime date

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

实际查询计划估计成本和 dm_exec_query_stats 工作时间不融合

我清除了我的统计数据并运行了我的查询。实际执行计划的总估计成本为 0.61。我使用dmv 中的total_worker_timedm_exec_query_stats来计算平均 20858 微秒的 CPU 时间:

(SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count))
Run Code Online (Sandbox Code Playgroud)

该计划推荐了一个索引,我创建了该索引。我清除了我的统计信息,然后再次运行查询。这一次,该计划在顶层的总估计成本为 0.37。我dm_exec_query_state再次检查了dmv,现在平均 CPU 时间为 51536 微秒。

我原以为工人的时间大约是一半,而不是两倍!我在这里错过了什么吗?为什么查询计划的改进没有反映在 exec 查询统计信息中?两个计划在这里上传:

计划1

计划2

sql-server execution-plan

1
推荐指数
2
解决办法
2527
查看次数

SQL Server 查询计划哈希冲突

我想知道是否有人可以阐明我的担忧,即query_plan_hash碰撞可能导致查询作为完全不同的查询执行。

散列是一个 16 位的十六进制,sp_help sys.dm_exec_query_stats表示是一个二进制。因此它只是一个 64 位的散列,并且碰撞似乎很有可能(考虑到 SHA1 [160 位] 刚刚被验证有碰撞)。

请问plan_hashquery_plan_hash都有碰撞的这个(查询作为一个完全不同的查询被执行)的情况发生?

我也很好奇 SQL Server 中是否有设置允许我们将此哈希更改为 SHA2-512(以减少发生冲突的可能性)。我们的数据非常重要。

我通过 Google 和 Stack Exchange 论坛进行了高低搜索。

sql-server execution-plan database-internals hashing

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

事务中非持久计算列的一致性

有没有办法防止非持久计算列在事务中更新?

我已经拼凑了一个示例,该示例表明这些列在使用非确定性函数时可以更新(在本例中getutcdate())。这不会破坏事务的一致性要求吗?我曾尝试使用事务级别来防止这种情况(可序列化和快照),但没有帮助。

询问:

set nocount on;

create table dbo.TransactionTest (
    [Timestamp] datetime,
    IsUpdated as case when datediff(second, [Timestamp], getutcdate()) >= 1 then 1 else 0 end
);

insert into dbo.TransactionTest ([Timestamp]) values (getutcdate());

begin tran

select  *
from    dbo.TransactionTest;

waitfor delay '00:00:01';

select  *
from    dbo.TransactionTest;

rollback

drop table dbo.TransactionTest;
Run Code Online (Sandbox Code Playgroud)

结果:

Timestamp               IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 0

Timestamp               IsUpdated
----------------------- -----------
2017-03-19 00:44:28.130 1
Run Code Online (Sandbox Code Playgroud)

sql-server

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

我应该使用查询提示吗?

SQL Server 2008 R2,Dynamics AX 2009 我们有这个丑陋的查询

DECLARE @P1 NVARCHAR(5), @P2 INT, @P3 INT, @P4 NVARCHAR(11), @P5 INT, @P6 NVARCHAR(5), @P7 NVARCHAR(11)SELECT A.SALESID,
   A.LINENUM,
   A.ITEMID,
   A.SALESSTATUS,
   A.LEDGERACCOUNT,
   A.NAME,
   A.EXTERNALITEMID,
   A.TAXGROUP,
   A.QTYORDERED,
   A.SALESDELIVERNOW,
   A.REMAINSALESPHYSICAL,
   A.REMAINSALESFINANCIAL,
   A.COSTPRICE,
   A.SALESPRICE,
   A.CURRENCYCODE,
   A.LINEPERCENT,
   A.LINEDISC,
   A.LINEAMOUNT,
   A.CONFIRMEDDLV,
   A.RESERVATION,
   A.SALESUNIT,
   A.DIMENSION,
   A.DIMENSION2_,
   A.DIMENSION3_,
   A.PRICEUNIT,
   A.PROJTRANSID,
   A.INVENTTRANSID,
   A.CUSTGROUP,
   A.CUSTACCOUNT,
   A.SALESQTY,
   A.SALESMARKUP,
   A.INVENTDELIVERNOW,
   A.MULTILNDISC,
   A.MULTILNPERCENT,
   A.SALESTYPE,
   A.BLOCKED,
   A.COMPLETE,
   A.REMAININVENTPHYSICAL,
   A.TRANSACTIONCODE,
   A.TAXITEMGROUP,
   A.TAXAUTOGENERATED,
   A.UNDERDELIVERYPCT,
   A.OVERDELIVERYPCT,
   A.BARCODE,
   A.BARCODETYPE,
   A.INVENTREFTRANSID,
   A.INVENTREFTYPE,
   A.INVENTREFID,
   A.ITEMBOMID,
   A.LINEHEADER,
   A.SCRAP,
   A.DLVMODE,
   A.INVENTTRANSIDRETURN,
   A.PROJCATEGORYID,
   A.PROJID,
   A.INVENTDIMID,
   A.TRANSPORT,
   A.STATPROCID, …
Run Code Online (Sandbox Code Playgroud)

sql-server tuning microsoft-dynamics

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

有条件地 OR vs CASE vs IF

可以说,我有一个查询,

SELECT * FROM MyTable WHERE MyParam = 0 OR MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)

这里 MyParam 是参数和可选的。因此,它只检查MyColumn = MyParamMyParam 是否不为 0。但是我们的 DBA 说 OR 会使其变慢,而 db 会受到影响。另一种选择是,

IF MyParam = 0 
SELECT * FROM MyTable WHERE MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于我们有很多可选参数。所以,我们的查询变得非常非常大。另一种选择是 CASE。

所以你们的建议是什么。我在谈论一般是 Oracle 还是 SQL Server。

oracle sql-server

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

大型数据库的 SQL Server 2016 就地升级时间

是否有关于在具有 1000 多个数据库和 10TB 存储空间的服务器上将 SQL Server 2014 升级到 SQL Server 2016 需要多长时间的统计数据?安装后续 2016 服务包需要多长时间?有没有办法通过配置来优化这些安装时间?

目标是最小化维护窗口

更新:让我澄清一个问题。所有生产更新都将在 QA 环境中进行测试,问题不在于这一切。我问的是已知的优化升级持续时间的选项。我将通过测量我环境中的升级时间来自己搜索这些选项,但如果有“以前的艺术” - 请分享。

sql-server upgrade sql-server-2016

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

SQL Server 2012 中 AAG 的手动故障转移

只是一个关于手动故障转移的问题。如果我们使用 SSMS 执行故障转移与转到故障转移群集管理器并将角色移动到辅助节点,这是否重要?是否有首选方法或任何一种方法都可以?

sql-server clustering availability-groups

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

作业不是作为代理运行,而是作为引擎帐户运行

我最近创建了一个新的 SQL Server 环境,我正在尝试尽可能使用最佳实践,尤其是最低特权的方法。我们环境中的其他服务器只有使用域​​管理员权限和 SA 权限的组合运行的作业,这“简单”且可怕。

除此之外,我有使用域帐户运行的数据库引擎DOMAIN\sqlengine和使用DOMAIN\sqlagent.

我有一个简单的维护计划,可以将服务器上的所有数据库完整备份到远程 UNC 路径。我曾假设/计划代理帐户 ( DOMAIN\sqlagent) 将执行计划的作业。作业因操作系统驱动的拒绝访问错误而失败。所以我DOMAIN\sqlagent在目录中添加了帐户修改权限,以便它可以执行备份。令我惊讶的是它又失败了。当我检查目标服务器的安全日志时,我看到这DOMAIN\sqlengine是帐户身份验证。该帐户没有获得 UNC 路径的权限。为什么引擎帐户而不是代理帐户运行作业?

如果我查看我DOMAIN\sqlagent为该维护计划中的所有作业设置的作业所有者。在作业步骤下,它被设置为作为“SQL Server 代理服务帐户”运行。

我做错了什么或不理解?

sql-server permissions sql-server-2008-r2 jobs

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