小编AA.*_*.SC的帖子

将最后一个身份插入表中的最佳方法

哪个是获取我刚刚通过插入生成的标识值的最佳选择?这些语句对性能有什么影响?

  1. SCOPE_IDENTITY()
  2. 聚合函数 MAX()
  3. SELECT TOP 1IdentityColumn FROM TableNameORDER BY IdentityColumn DESC

sql-server sql-server-2008-r2 identity

42
推荐指数
2
解决办法
22万
查看次数

资源池“内部”中的系统内存不足,无法运行此查询

我们的一台生产服务器在日志中报告错误

错误:701,严重性:17,状态:123
。资源池“内部”中的系统内存不足,无法运行此查询。

我搜索了这个错误,发现它是一个错误,并且有一个带有 service pack 2 的热修复。这些是服务器的详细信息:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 标准版(64 位)
处理器数量:24(有 2 个 NUMA 节点,每个有 12 个内核)
内存:为 SQL Server 分配 24GB RAM。
查询批量/分钟:5000+

我的问题是

  • 为什么我们会收到此错误?
  • 这是一个严重的问题吗?
  • 我们如何解决?

编辑内存状态:

MEMORYBROKER_FOR_RESERVE (internal) Pages ---------------------------------------- ---------- Allocations 200362 Rate 4510 Target Allocations 200362 Future Allocations 588626 Overall 2521497 Last Notification 0
MEMORYBROKER_FOR_STEAL (internal) Pages ---------------------------------------- ---------- Allocations 431548 Rate 1973 Target Allocations 323529 Future Allocations 0 Overall 2521497 Last Notification 2
MEMORYBROKER_FOR_CACHE (internal) Pages …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search sql-server-2008-r2

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

计算总访问量

我正在尝试编写一个查询,我必须通过处理重叠天数来计算客户的访问次数。假设 itemID 2009 的开始日期是 23 日,结束日期是 26 日,因此项目 20010 介于这些天之间,我们不会将此购买日期添加到我们的总数中。

示例场景:

Item ID Start Date   End Date   Number of days     Number of days Candidate for visit count
20009   2015-01-23  2015-01-26     4                      4
20010   2015-01-24  2015-01-24     1                      0
20011   2015-01-23  2015-01-26     4                      0
20012   2015-01-23  2015-01-27     5                      1
20013   2015-01-23  2015-01-27     5                      0
20014   2015-01-29  2015-01-30     2                      2
Run Code Online (Sandbox Code Playgroud)

OutPut 应该是 7 VisitDays

输入表:

CREATE TABLE #Items    
(
CustID INT,
ItemID INT,
StartDate DATETIME,
EndDate DATETIME
)           


INSERT INTO #Items
SELECT 11205, …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 gaps-and-islands

12
推荐指数
3
解决办法
1839
查看次数

查询 DMV sys.dm_os_performance_counters 时返回零行

我有一个用户SQL Server 2014 Standard Edition (RTM)具有SYSADMIN与服务器视图状态权限的角色,但是当我执行DMVsys.dm_os_performance_counters返回没有记录。

知道权限有什么问题吗?

在此处输入图片说明

@@Version 的输出:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 2014 年 2 月 20 日 20:04:26 版权所有 (c) Microsoft Corporation Standard Edition(64 位)在 Windows NT 6.3(Build 9600:)(Hypervisor)上

sql-server dmv sql-server-2014

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

SSIS - 当未找到特定连接元素时,Connections 集合会抛出此错误

我正在编写一个包以将查询结果作为 CSV 文件上传到 FTP。

包在本地机器上运行良好,但在另一个环境上传输 .dtsConfig 和 .dtsx 后,它在执行包中的所有任务后抛出以下错误消息。

说明:未找到连接“{008A2775-60D6-44B1-8790-69958EB74371}”。当未找到特定连接元素时,Connections 集合会抛出此错误。结束错误 错误:2014-11-24 07:32:05.79 代码:0xC001000E 来源:PackageName
描述:未找到连接“{008A2775-60D6-44B1-8790-69958EB74371}”。当未找到特定连接元素时,Connections 集合会抛出此错误。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。开始:上午 7:32:05 结束:上午 7:32:07 经过:1.81 秒。包执行失败。步骤失败。

知道是什么原因吗?

sql-server ssis sql-server-2008-r2

8
推荐指数
1
解决办法
5万
查看次数

虚拟日志文件 (VLF) 碎片

我有一个包含 160 个 VLF 的数据库。如何确定 VLF 是否碎片化?此外,我如何找到碎片的百分比?

我想确认的另一件事是:对于 SQL Server 虚拟日志文件中新添加的块,以下 3 条语句是否始终正确?

  1. 块小于 64MB 和高达 64MB = 4 VLF
  2. 大于 64MB 且高达 1GB 的块 = 8 个 VLF
  3. 大于 1GB 的块 = 16 个 VLF

sql-server-2008 sql-server sql-server-2008-r2 transaction-log

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

sys.indexes 中的 is_unique 列和 is_unique_constraint 列有什么区别

我们有两列is_uniqueis_unique_constraint唯一的约束sys.indexes,我想澄清一些基于这两列的概念

  1. 除了fill factor属性值之外,两种类型的索引的创建语句是相同的还是我遗漏了什么?
  2. 如果语句 1 为真,那么为什么我们在 sys.indexes 中有两列用于唯一约束?
  3. 何时is_unique=1 is_unique_constraint =0然后删除索引的语句是
    DROP INDEX [index name] ON [dbo].[TableName] WITH ( ONLINE = OFF )

    何时is_unique=1 is_unique_constraint =1然后删除索引的语句是
    ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [IndexName]

    为什么呢?

  4. 我们在哪里使用唯一索引和唯一约束,最佳实践是什么?

index sql-server sql-server-2008-r2

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

使用 Case 语句检查约束

如果列的输入值大于 3,我想在列上添加一个检查约束,而不应将其保存为 1 个其他输入值。对于这种情况,我使用下面的查询,但在插入数据时显示错误消息。

create table tblTestCheckConstraint 
(
id int,
NewColumn int
)


alter table tblTestCheckConstraint
add constraint chk_tblTestCheckConstraint_NewColumn1 CHECK  
(
    CASE
        WHEN NewColumn >4 THEN 1
        ELSE NewColumn
    END = 1
)
Run Code Online (Sandbox Code Playgroud)

插入语句:

insert into tblTestCheckConstraint values ( 1,5)
insert into tblTestCheckConstraint values ( 1,2)
Run Code Online (Sandbox Code Playgroud)

错误信息:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chk_tblTestCheckConstraint_NewColumn1". The conflict occurred in database "DBName"
, table "dbo.tblTestCheckConstraint", column 'NewColumn'.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server check-constraints

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

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

我的数据库中有两个用户。当我在用户下执行以下查询时,ONE它成功执行;但是,当我在用户下执行它时,TWO它会生成一条错误消息:

询问:

select cast ('2015-04-28 16:00:00.000' as datetime)
Run Code Online (Sandbox Code Playgroud)

错误消息:

消息 242,级别 16,状态 3,第 11 行
varchar 数据类型到 datetime 数据类型的转换导致值超出范围。

用户ONE将英语作为默认语言,其简单的服务器登录
用户TWO将英国英语作为默认语言,也用作应用程序用户

数据库属性

在此处输入图片说明

因为在我的真实查询中,列是 inWhere子句来获取指定日期范围的结果集:

    CAST(CONVERT(VARCHAR(10), Createdate, 101) AS DATETIME) >= CAST(CONVERT(VARCHAR(10), StartDate, 101) AS DATETIME) 
    AND 
    CAST(CONVERT(VARCHAR(10), Createdate, 101) AS DATETIME) <= CAST(CONVERT(VARCHAR(10), EndDate, 101) AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

我验证了 columns CreatedateStartDate并且在数据库中EndDate有一个DateTime数据类型。

到目前为止我尝试过的:

  1. 删除了铸造cast(columnname as datetime)及其工作正常。

    CONVERT(VARCHAR(10), Createdate, 101)  >= CONVERT(VARCHAR(10), StartDate, 101) …
    Run Code Online (Sandbox Code Playgroud)

sql-server

3
推荐指数
1
解决办法
5万
查看次数