哪个是获取我刚刚通过插入生成的标识值的最佳选择?这些语句对性能有什么影响?
SCOPE_IDENTITY() MAX()TOP 1IdentityColumn FROM TableNameORDER BY IdentityColumn DESC我们的一台生产服务器在日志中报告错误
错误: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) 我正在尝试编写一个查询,我必须通过处理重叠天数来计算客户的访问次数。假设 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 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)上
我正在编写一个包以将查询结果作为 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 秒。包执行失败。步骤失败。
知道是什么原因吗?
我有一个包含 160 个 VLF 的数据库。如何确定 VLF 是否碎片化?此外,我如何找到碎片的百分比?
我想确认的另一件事是:对于 SQL Server 虚拟日志文件中新添加的块,以下 3 条语句是否始终正确?
sql-server-2008 sql-server sql-server-2008-r2 transaction-log
我们有两列is_unique和is_unique_constraint唯一的约束sys.indexes,我想澄清一些基于这两列的概念
fill factor属性值之外,两种类型的索引的创建语句是相同的还是我遗漏了什么? 何时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]
为什么呢?
我们在哪里使用唯一索引和唯一约束,最佳实践是什么?
如果列的输入值大于 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) 我的数据库中有两个用户。当我在用户下执行以下查询时,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 Createdate,StartDate并且在数据库中EndDate有一个DateTime数据类型。
到目前为止我尝试过的:
删除了铸造cast(columnname as datetime)及其工作正常。
CONVERT(VARCHAR(10), Createdate, 101) >= CONVERT(VARCHAR(10), StartDate, 101) …Run Code Online (Sandbox Code Playgroud)