MSDN 说实数的范围是 - 3.40E + 38 到 -1.18E - 38, 0 和 1.18E - 38 到 3.40E + 38。显然真正的下限要低得多。以下脚本使用 1.401298E-45 填充 REAL 列:
CREATE TABLE a
(
r1 REAL NULL ,
r2 REAL NULL ,
r3 REAL NULL
) ;
GO
INSERT INTO a
( r1, r2 )
VALUES ( 1.18E-37, 10 ) ;
GO
DECLARE @i INT ;
SET @i = 1 ;
WHILE @i < 20
BEGIN ;
UPDATE a
SET r1 = r1 / r2 ; …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server sql-server-2008-r2 data-integrity
我正在记录我的数据库,我想在我的数据库中创建一个所有索引的列表。我想这样做的原因是,我可以加班跟踪索引的更改。我目前有一个电子表格,其中包含自我创建该电子表格以来已更改的所有索引,但它没有所有索引。我希望能够生成列表,而不是编写每个索引的脚本。我玩过系统视图,但我无法弄清楚。
如何为每个索引生成索引列表和创建语句?
我刚刚开始了解 SQL Server 上的内存使用情况。在问题SQL Server 2008 R2“Ghost Memory”的答案中使用查询时?,我发现单个数据库占用了缓冲池中的大部分空间。进一步看,使用sys.allocation_units和sys.indexes,我确认这可能是由于大量使用数据库中的索引造成的。大多数索引都是聚集的。
另一位数据库开发人员认为我们在服务器上存在内存问题 - 由于没有可用内存,查询开始运行很长时间。
我的问题是 - 这些索引的使用以及它们在缓冲池中的存在是否会占用其他进程可用的内存?
我需要更新单个表中的 1 亿条记录,实际上,通过用简单的 ID 替换列的 varchar 值来规范化表。(我说的是“替换”,但实际上我是将 ID 写入另一列。)
我想要实现的是规范化数据集。尚未标准化的数据没有索引。我的想法是我不会在原始值上构建索引,而是等待,而是索引将在更新完成后用 tinyint 值替换 varchar 值的外键。
UPDATE A
SET A.AutoClassID = B.AutoClassID
FROM AutoDataImportStaging.dbo.Automobile as A
JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName)
Run Code Online (Sandbox Code Playgroud)
背景
执行期间的资源
我怀疑一些事情,比如我需要原始数据的索引,即使我会在规范化更新后删除列 (AutoClassName)。我还想知道我是否应该一次循环一条记录而不是 JOIN,这在我开始时看起来很荒谬,但现在看来会更快。
我应该如何更快地更改剩余标准化更新(类似于此更新)的方法?
我有几个应该按顺序运行的 SQL Server 代理作业。为了对应该执行的作业有一个很好的概述,我创建了一个主作业,它通过调用EXEC msdb.dbo.sp_start_job N'TEST1'. 在sp_start_job瞬间完成(作业步骤1),但我想我的主要工作要等到工作TEST1已经调用下一个工作之前完成。
所以我写了这个小脚本,它在作业被调用后立即开始执行(作业步骤 2),并强制主作业等待子作业完成:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Run Code Online (Sandbox Code Playgroud)
这工作得很好。但我觉得更聪明和/或更安全(WHILE 1 = 1?)的解决方案应该是可能的。
我对以下事情很好奇,希望你能给我一些见解:
(我首先在StackOverflow 上发布了这个问题,因为我专注于改进代码。仍然有效。但我的猜测是,这里的人们通常会更聪明地说出为什么我不应该像我那样尝试这样做”我现在就做,或者提供好的替代方案。)
编辑(7 月 25 日)
显然我的脚本没有太多错误,根据指出它问题的答案数量很少:-) 这种脚本的替代方法似乎是使用专为这些设计的工具任务(如 SQL Sentry 事件管理器或...) - …
我当前的项目涉及大量的数据库改组,因为我们从 SQL 2008 -> 2012 升级,重新分配硬件,重复。
一个小烦恼是 SSMS 中的连接对话框重新调整服务器顺序以将最新的放在最前面。鉴于在任何特定的日子里我都连接到 6-10 个数据库服务器并希望在列表中快速找到一个特定的服务器,这种行为与其说是一种帮助,不如说是一种障碍。
有没有办法禁用这种行为,按字母顺序列出服务器,或者按照添加的顺序……或者每次连接到服务器时都不会改变的任何东西?
除此之外,是否有一种完全不同的方法可以更好地管理从它们的列表/服务器场连接到特定服务器?
我正在将 SSMS 用于 SQL 2012(尽管我对 2008 解决方案也很好奇)。
我需要每周导入大约 500,000 条包含 IP 查找(只读参考)数据的记录(只有三个 int/bigint cols)。
我真的不想担心将数据与现有表合并,我更愿意清除旧表并重新导入。
理想情况下,运行在数据上的查询将继续运行(我们没有得到很多这样的查询,它们在导入时运行得慢一点是可以接受的,但需要 24/7,所以运行这个“非工作时间”不是一种选择)。
到目前为止尝试过的事情
SSIS:我创建了一个 SSIS 包来截断表和导入 - 运行大约需要 30 秒(真的太长了)。
临时表:导入临时表、截断和复制也需要大约 30 秒。
BCP:批量导入也太慢了(出于某种原因,它比 SSIS 慢(即使没有要维护的索引)-我猜这与 char->int/bigint 事务有关:/
镜台?所以,目前,我想知道如何通过视图读取表,将数据导入镜像表,并更改视图以指向该表......这看起来会很快,但看起来很小对我来说有点hacky。
这似乎应该是一个常见问题,但我找不到推荐的做法 - 任何想法都将不胜感激!
谢谢
我希望能够预测 DELETE 是否会违反约束,而无需实际执行删除。
我有什么选择来做这件事?有没有一种简单的方法可以对 DELETE 进行“试运行”?
我想强制重置 SQLCLR 使用的 AppDomain。除了重新启动 SQL Server 实例之外,我还能怎么做?
有谁知道“Non-yielding IOCP Listener”是什么意思?
我们的 SQL Server 上有一个错误检查转储:
=====================================================================
BugCheck Dump
=====================================================================
This file is generated by Microsoft SQL Server
version 9.00.5292.00
upon detection of fatal unexpected error. Please return this file,
the query or program that produced the bugcheck, the database and
the error log, and any other pertinent information with a Service Request.
Computer type is AT/AT COMPATIBLE.
Bios Version is DELL - 1
Phoenix ROM BIOS PLUS Version 1.10 1.5.2
Current time is 23:01:04 09/07/12.
48 Unknown CPU …Run Code Online (Sandbox Code Playgroud)