我想这样做:
DECLARE @Id INT;
UPDATE Logins
SET SomeField = 'some value'
OUTPUT @Id = Id
WHERE EmailAddress = @EmailAddress -- this is a parameter of the sproc
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?我知道我可以声明一个本地表变量并将输出定向到那里,但如果可能的话我宁愿跳过它
sql-server-2008 sql-server sql-server-2012 update output-clause
读完这个问题让我想起了我不久前的一个问题。
我们有一个具有 512GB RAM 的 SQL Server,主数据库是 450GB。我们在 TempDB 中看到了很多动作(好吧,我认为这是“相当多的动作”——可能不是!)。我安装了 RamDisk Plus Server 的演示版,创建了一个 50GB 的 ramdrive,将 TempDB 指向它,但并没有看到性能有任何改善。
写入 TempDB 是否总是导致对磁盘的实际物理写入,或者 TempDB 写入是否由 SQL Server 缓存以便像在 Windows 文件系统缓存中那样延迟写入?
在这种情况下,ramdisk 毫无意义吗?
我知道 SQL Server 6.5 支持 TempDB-In-Ram,但我看到它很久以前就停产了!
我正在查看两台服务器之间的快照复制。这是我所拥有的:
我向公司中的其他 DBA 询问要使用哪种复制类型。有人告诉我使用快照复制。但是,据我了解和阅读,每天晚上加载后快照都会将数据库完全复制到分发服务器,然后完全覆盖其他服务器。
快照是在增量中工作还是每次都是完整的副本?
我SqlException在调用存储过程时得到以下信息:
尝试在数据库 2 中获取逻辑页 (5:65424) 失败。它属于分配单元 7349876362857938944 不属于 4899918190390149120。
System.Data.SqlClient.SqlException发生
Message="Attempt to fetch logical page (5:65424) in database 2 failed. 它属于分配单元 7349876362857938944 不属于 4899918190390149120。Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=21
LineNumber=257
Number=605
Procedure="ispDisplayCount"
Server="10.10.1.1"
State=3
这个异常是什么意思?以上问题有解决办法吗?
尽管上述错误中引用的数据库表示 tempdb,但引用消息 605 的类似错误可以使用以下答案进行修复。
消息 605,级别 21,状态 3,第 1 行
尝试获取数据库 7 中的逻辑页 (1:8687634) 失败。它属于分配单元 72057594364821504 不属于 72057594052476928。
首先,我对 stackexchange 很陌生,所以请耐心等待。
我正在运行 SQL Server 9.0.4060。
我的问题是:我的 SQL Server 备份在很多数据库上一直失败。
维护计划运行到不同的备份作业:
每天 20:30 进行 DIFF 备份,每周日 20:30 进行 FULL 备份。
对于无法完成备份的每个数据库,我收到这两个错误:
Date 06-11-2012 20:31:06
Log SQL Server (Current - 07-11-2012 11:43:00)
Source Backup
Message
BACKUP failed to complete the command BACKUP DATABASE (dbname) WITH DIFFERENTIAL. Check the backup application log for detailed messages.
Date 06-11-2012 20:31:06
Log SQL Server (Current - 07-11-2012 11:43:00)
Source Backup
Message
Error: 3041, Severity: 16, State: 1.
Run Code Online (Sandbox Code Playgroud)
额外的错误。
Date 06-11-2012 17:53:27
Log SQL Server …Run Code Online (Sandbox Code Playgroud) 我有一个存储过程,在插入新数据(基于其他表中的数据、计算等)之前,它会截断一些包含大约 1.75M 行的表。
基本大纲很简单:
我想知道我是否应该在此过程中的任何时候明确重新构建索引?例如
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]也许
ALTER INDEX ALL ON xxx DISABLEALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]感谢任何帮助......不是 DBA - 非常了解 DB 的开发人员更准确!
我们有一个非常大规模的企业级数据库。作为我们业务模型的一部分,所有 Web 用户每个月都会在同一时间访问我们的 Web 服务器,这反过来又会影响我们的 sql 框。流量非常大,并且随着公司规模的扩大,流量会继续增长。sql proc优化已经完成,硬件已经扩展到一个非常高的水平。
我们现在正在寻求对数据库进行分片,以确保我们能够处理公司的增长和未来的负载。
我们已经决定应该对哪些特定数据进行分片。它是我们数据库的一个子集,使用率很高。
但是,我的问题是关于常见/通用的非分片数据。像这样的数据示例可能是库存表,也可能是员工表、用户表等。
我看到两个选项来处理这个通用/通用数据:
1) 设计 1 - 将通用/通用数据放在外部数据库中。所有写入都将发生在这里。然后,此数据将被复制到每个分片,允许每个分片读取此数据并在 t-sql procs 中对这些数据进行内部连接。
2) 设计 2 - 为每个分片提供所有通用/通用数据的副本。让每个分片本地写入这些表,并利用 sql 合并复制在所有其他分片上更新/同步此数据。
对设计的担忧 #1
1) 事务性问题:例如,如果您必须在分片中写入或更新数据,然后在 1 个存储过程中写入/更新公共/通用表,您将无法再轻松地做到这一点。数据现在存在于单独的 sql 实例和数据库中。您可能需要使用 MS DTS 来查看是否可以将这些写入包装到事务中,因为它们位于单独的数据库中。性能是这里的一个问题,并且可能涉及写入分片和公共数据的过程的重写。
2) 参照完整性的丧失。无法实现跨数据库参照完整性。
3) 重新编码系统的大面积区域,使其知道将公共数据写入新的通用数据库但从分片读取公共数据。
4)。增加了数据库行程。像上面的#1 一样,当您遇到必须更新分片数据和公共数据的情况时,您将进行多次往返来完成此操作,因为数据现在位于不同的数据库中。这里有一些网络延迟,但我并不像上述 3 那样担心这个问题。
对设计的担忧 #2
在设计#2 中,每个分片都有自己的所有公共/通用数据的实例。这意味着连接到或更新公共数据的所有代码继续像今天一样工作/运行。开发团队几乎不需要重新编码/重写。然而,这种设计完全依赖于合并复制来保持所有分片之间的数据同步。数据库管理员技术精湛,非常担心合并复制可能无法处理这个问题,如果合并复制失败,从这个失败中恢复不是很好,可能会对我们产生非常负面的影响。
我很想知道是否有人选择了设计选项 #2。我也很想知道我是否忽略了我没有看到的第三个或第四个设计选项。
先感谢您。
DMV sys.dm_exec_query_stats中last_worker_time和last_elapsed_time是什么意思,它们之间有什么区别?
当我触发以下查询时
SELECT TOP 20
qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S,
qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S
FROM sys.dm_exec_query_stats qs
order by qs.last_worker_time desc
Run Code Online (Sandbox Code Playgroud)
我得到如下结果。

我注意到的事情是两者相等或经过的时间超过工作时间。我想了解两者的重要性,因此它也可能有助于我进行性能调整。
我有一个测试环境,设置如下:
我们正在测试升级到 SQL Server 2012 Developer Edition (sp1) 的过程...
我已经下载了 64 位 SQL Server 2012 Dev 的 iso。(sp1) 来自 MSDN(完整许可副本),并已开始走上升级之路。在开始检查不同标准的最后阶段之一,我们遇到了一个奇怪的问题,如下所述:
Rule "Upgrade architecture mismatch" failed. The CPU architectures of upgrading feature(s) are different. To upgrade these features, Setup architecture must be the same as the features being installed.
Run Code Online (Sandbox Code Playgroud)
此外,在升级日志文件中,我发现了以下(更详细的)输出:
(03) 2012-12-28 14:02:45 Slp: Init rule target object: Microsoft.SqlServer.Configuration.SetupExtension.BlockMixedArchitecture …Run Code Online (Sandbox Code Playgroud) replication sql-server-2005 sql-server sql-server-2012 merge-replication
我有一个将两条记录插入到表中的存储过程,记录之间的区别在于第二条记录的时间列在第一条@MinToAdd之后:
CREATE PROCEDURE CreateEntry
/*Other columns*/
@StartTime time(2),
@EndTime time(2),
@MinutesToAdd smallint
AS
BEGIN
SET NOCOUNT ON;
SET @MinutesToAdd = @MinutesToAdd % 1440; --Prevent overflow if needed?
IF (@MinutesToAdd > 0)
BEGIN
INSERT INTO ClientNotification (/*Other columns*/ startTime, endTime)
OUTPUT inserted.id
VALUES
(/*Other columns*/ @StartTime, @EndTime),
(/*Other columns*/ @StartTime + @MinutesToAdd, @EndTime + @MinutesToAdd);
END
ELSE
BEGIN
/*Whatever ELSE does.*/
END
END
Run Code Online (Sandbox Code Playgroud)
将@MinutesToAdd分钟添加到@StartTime和的正确方法是什么@EndTime?
请注意我使用的是time数据类型。
更新:
正确答案应包含以下信息:
time数据类型。 …sql-server ×10
performance ×2
replication ×2
backup ×1
corruption ×1
dmv ×1
index ×1
snapshot ×1
tempdb ×1
update ×1