我只是在阅读 SQL Server 2012 考试的文档,我看到了以下几点:
case 与 isnull 与合并
现在,我知道如何使用每一种,但我不知道何时使用每一种。请一些机构澄清。谢谢。
附言。请问我们可以有一个考试问题的标签吗?
在我的应用程序中,我必须执行分布式锁定模式。因为我们已经有一个 SQL Server 实例可以使用,所以我们决定在我们的 Web 应用程序的 SQL 层实现锁定是最容易的。
可以根据多种条件获得锁,包括:
出于所有意图和目的,将上述两个条件视为int数据类型。
在这种模式中,我们希望将我们所有的锁都视为 FIFO,我相信SERIALIZABLE隔离级别会给我们带来这种好处。
以下是我们建议如何执行“锁定”:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
IF EXISTS (SELECT 1 FROM locks WHERE LockType = @LockType AND ApplicationIdentifier = @ApplicationIdentifier)
BEGIN
-- Awesome, the lock will be acquired
INSERT INTO locks OUTPUT INSERTED.LockId VALUES (2,3)
END
ELSE
BEGIN
-- Someone already has the lock
SELECT -1
END
SET TRANSACTION ISOLATION LEVEL READ COMITTED
Run Code Online (Sandbox Code Playgroud)
和“解锁”:
DELETE FROM locks WHERE LockId = @LockId
Run Code Online (Sandbox Code Playgroud)
所以我的问题有两个方面: …
我在 SQL Server 2005 中有两个日期时间列,我需要在没有日期时间的时间部分的情况下进行查询。目前,我的查询看起来像这样(只是一个例子):
WITH Dates AS (
SELECT [Date] = @StartDate
UNION ALL SELECT [Date] = DATEADD(DAY, 1, [Date])
FROM Dates WHERE [Date] < @EndDate
)
SELECT DISTINCT ID
FROM table t
CROSS APPLY DATES d
WHERE d.[Date] BETWEEN CONVERT(DATETIME, CONVERT(VARCHAR, t.StartDate, 103)) AND CONVERT(DATETIME, CONVERT(VARCHAR, t.EndDate, 103))
Run Code Online (Sandbox Code Playgroud)
现在这会导致完整的聚集索引扫描(惊喜,惊喜)。我正在想办法让这个更快(实际查询需要 3 分钟:O)。我曾想过执行以下操作,但由于时间不够,还没有尝试过:
最简单的方法是更新列并删除所有时间信息,但我不能这样做:(
有任何想法吗?
更新
感谢您到目前为止的所有答案。我认为问题的重点被忽略了,因为我对自己想要什么有点不清楚。我的错。我只是想优化查询的日期转换部分,因为我处理的数据量实际上很小(在一年长的日期范围内交叉应用后 < 500,000)。很抱歉对此造成混淆。
对于那些为我优化其余查询的人,我可以通过使用看到人们在说什么,< >但请考虑以下几点:
就个人而言,鉴于上述情况,我永远无法找到< >工作的解决方案。我可以让它正常工作并且不会错过任何东西的唯一方法是使用 CTE 并说明 where d.[Date] …
和标题描述的差不多。我刚刚检查了一个 SQL Server 并注意到有很多查询计划膨胀可以通过适当的参数化来修复。
对代码进行更改后,是否建议我们清除查询计划缓存并让其自行重建?还是会及时清除?
注意:在前 50 个最大的查询中,有 47 个相同但参数不同。
继我最近在 Tempdb 上提出的一个问题之后。我想知道在添加和移动 tempdb 文件时如何正确设置自动增长属性?
我问这个问题是因为我想让 SQL Server 使用循环算法将工作负载分散到每个文件上。据我了解,如果文件大小不相等,那么 SQL Server 将使用空间最大的文件,从而增加导致闩锁争用的机会。我这里的理解正确吗?
干杯,
我有一些 SQL 脚本,希望每天在我的 SQL Server 上运行。如何多次查询并获得类似于以下内容的输出:
Health check for <server>
Query Title 1:
<query results 1>
Query Title 2:
<query results 2>
Run Code Online (Sandbox Code Playgroud)
我正在检查诸如上次良好备份、正常运行时间等内容,因此它们彼此不相关。我计划在 SQL Server 作业中使用 sp_send_db_mail。这是完成这项任务的最佳方式吗?
理想情况下,我只想要一封电子邮件。
更新
经过多年的战斗!!!到目前为止,我找到的解决方案是将其放入存储过程,然后像这样执行存储过程:
EXEC msdb.dbo.sp_send_dbmail
@recipients = N'<email>',
@body = @body,
@subject = @subjectt,
@profile_name = @ProfileName,
@query ='exec test..sp_checks'
Run Code Online (Sandbox Code Playgroud)
这可以用于多个选择语句吗?
我目前正在看这个Entity Framework 上视频,大约 15 分钟后,演讲者说表值函数偶尔会执行 UDF。
我的问题是在什么情况下 TVF 会执行 UDF?