标签: sql-server-2012

UPDATE触发器导致死锁

我有一个 After Update 触发器,其中触发器在同一个表中插入一个值以查找持续时间列。我的目标是每当插入 end_time 值时,触发器将找到hh:mm:ss格式的持续时间并插入到持续时间列中。

问题-触发器导致如此多的死锁,从而阻塞了另一个进程。

列数据类型信息..

Start_time datetime, End_time datetime, Duration time(3)

ALTER TRIGGER [dbo].[GET_DURATION] ON [dbo].[INBOUND_CALL_xxx]
AFTER UPDATE AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Begin Transaction

               UPDATE INBOUND_CALL_xxx
               SET DURATION = convert(time(0),(END_TIME- START_TIME))                                                     
               FROM INBOUND_CALL_xxx with (nolock)
Commit;
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server sql-server-2012 performance-tuning

0
推荐指数
1
解决办法
3842
查看次数

SQL PRINT 与 SQL EXEC

执行下面的查询时,如果我使用PRINT它打印正确。我可以复制并粘贴打印的代码并执行它。但是,如果我使用 EXEC,则会出现以下错误:

执行时出错

有没有办法简化我正在做的事情?为什么 SQLPRINT和 SQL 会EXEC提供这两种截然不同的结果集?

DECLARE @TableName as NVARCHAR(250), @SQL as VARCHAR(MAX);

DECLARE @TableCursor as CURSOR;
SET @TableCursor = CURSOR FOR
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
AND name like 'HISTORY_MasterList_%'
ORDER BY sobjects.name

OPEN @TableCursor;
FETCH NEXT FROM @TableCursor INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL ='select '''+ @TableName +''', 0
 Union All
select All ''Server Count'',count(1) from ['+ @TableName +'] 
 Union All
select All ''Server Cores'',sum(convert(decimal(18,0),cores)) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2012

0
推荐指数
1
解决办法
1371
查看次数

由于列大小过长,查询需要更多时间来执行

当我尝试在 SSMS 中执行以下查询时,由于列大小过长(列名称:关键字,列大小:nvarchar(4000)),查询需要更多时间(超过 10 分钟)来执行。员工表包含 6000 条记录。

Select EmployeeId, EmployeeName, Designation, Keywords
From Employees
Where StatusFlag = 'L'
Run Code Online (Sandbox Code Playgroud)

我为上表创建了下面的非聚集覆盖索引。

Create NonClustered Index NCI_Employees_StatusFlag On Employees(StatusFlag) Include (EmployeeId, EmployeeName, Designation, Keywords) 
Run Code Online (Sandbox Code Playgroud)

如何更快地从上表中检索数据?

sql-server sql-server-2012

0
推荐指数
1
解决办法
83
查看次数

如何更改我的 sql 日志 LDF 文件的初始大小?

不知何故,它的最小大小为 32GB。

实际的数据库大小约为 2GB。

每天从外部数据源擦除和重新创建数据库,因此根本不需要任何日志,因为它每次都是从头开始重建。

也就是说,我想缩小 LDF 文件,因为它在我的开发机器的 SSD 上占用了大量空间,而且它不需要是数据库本身大小的 16 倍。

我发现我无法将日志缩小到其最小大小 32gb 以下,因此我需要更改最小大小。如果我转到数据库上的属性,我可以更改它,但是当我按 OK 时什么也没有发生。

除了编写数据库脚本以创建并删除它并使用较小的 LDF 重新制作它之外,是否还有其他命令或技术可以用来执行此操作?

sql-server-2012

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

从 SQL Server 2012 Exterprise 迁移到 SQL Server 2012 Express 后,数据库 BackupSize 已更改

我想说的是,在将 MS SQL Server 2012 Enterprise 迁移到 MS SQL Server 2012 Express 之后。我已经看到 DB 备份大小以及所有数据库的“LSN”存在一些细微的差异。

让我们从头开始一步一步地写下来。我在从 MS SQL Server 2012 Enterprise 迁移到 MS SQL Server 2012 Express 的过程中做了什么。

1) 我已于 2015 年 12 月 23 日在 MS SQL Server 2012 Enterprise 中备份了所有 3 个审计数据库。MS SQL Server 2012 企业版是

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud)

2) 从 …

backup restore sql-server-2012 transaction-log

-1
推荐指数
1
解决办法
100
查看次数

编写数据库用户级别权限的脚本

我试图搜索这个并且能够找到很少但找不到确切的方法来编写数据库的数据库级别权限。

我正在迁移这个数据库,我可以使用创建其登录名sp_help_revlogin,但不会复制用户权限。

我可以使用以下查询提取权限:

SELECT
   ISNULL(OBJECT_NAME(major_id),'') [Objects], USER_NAME(grantee_principal_id) as [UserName], permission_name as [PermissionName]
FROM
    sys.database_permissions p
WHERE grantee_principal_id>0
ORDER BY
    OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name
Run Code Online (Sandbox Code Playgroud)

但是我需要像 rev login 这样的东西来生成一个脚本,你可以执行来获取权限映射。

我尝试过 DBAtools,但我无法使用,因为它失败并出现错误

无法找到类型 [DbaInstanceParameter]

我有 50 多个登录名和大约 20 个要复制的角色。

sql-server permissions scripting sql-server-2012

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

仅使用 ldf 文件创建数据库创建了 2 个 .ldf 文件

当我在不指定 ldf 文件的情况下运行此查询时,它会自动创建 ldf 文件。

Declare @DBname nvarchar(50) = 'Test'
Declare @path nvarchar(50) = 'D:\DB'
Declare @query nvarchar(max) 

set @query = '

CREATE DATABASE ' + @DBname + '
ON
( NAME = ' +@DBname+',  
    FILENAME = '''+@path+'\'+@DBname+'.mdf'+''',
    SIZE = 1024,
    MAXSIZE = unlimited,
    FILEGROWTH = 500 )  
'
exec (@query)
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个查询时:

Declare @DBname nvarchar(50) = 'Test'
Declare @path nvarchar(50) = 'D:\DB'
Declare @query nvarchar(max) 

set @query = '

CREATE DATABASE ' + @DBname + '
ON 
( NAME = …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012

-1
推荐指数
1
解决办法
149
查看次数

查询性能问题

使用 Demo from here重现我的问题,更改表结构如下,并将演示分区函数修改为 datetime

CREATE TABLE [dbo].[DemoPartitionedTable](
    [DemoID] [int] IDENTITY(1,1) NOT NULL,
    [SomeData] [sysname] NOT NULL,
    [CaptureDate] [datetime] NULL,
 CONSTRAINT [PK_DemoPartitionedTable] UNIQUE NONCLUSTERED 
(
    [DemoID] ASC,
    [CaptureDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
Run Code Online (Sandbox Code Playgroud)

用户运行如下查询(查询 1)

SELECT [DemoID], [SomeData], [CaptureDate] FROM    
[dbo].[DemoPartitionedTable] WHERE (1=1) and (1=1) and    
CONVERT(varchar(10),CaptureDate,112) between 20190912 and 20190912
Run Code Online (Sandbox Code Playgroud)

计划是https://www.brentozar.com/pastetheplan/?id=r1veZhovH

大约需要 4 小时才能返回 500 万行

如果我使用如下分区键来改进上面的代码(查询 2)

 SELECT [DemoID], [SomeData], [CaptureDate] FROM …
Run Code Online (Sandbox Code Playgroud)

performance sql-server partitioning sql-server-2012 query-performance performance-tuning

-1
推荐指数
1
解决办法
143
查看次数

我无法识别这张带有 PDF 的表格中发生了什么

我有一个带有此配置的表:

在此输入图像描述

现在,如果您查看 COLUMN_11,它是一个 varchar -1。

但据我所知,要将 PDF 文件插入表中,您需要文件流,并且列应该是 VARBINARY(max) 对吗?

那么,这是如何运作的呢?为什么 VARCHAR 列中有 PDF?

DocumentBody 是这样的:

在此输入图像描述

显然,这样的数量有数百万。

sql-server-2012 filestream

-1
推荐指数
1
解决办法
40
查看次数

20亿列数据从varchar转int的缺点

我想将一列从 转换varchar(50)bigintint

SQL Server 2012中表有20亿条数据有什么缺点?

数据长度为 11,数据只有数字。它们被存储为 varchar。现在我必须为它创建索引。所以我想我必须转换int为创建索引。该表没有约束和索引。目前没有人使用那张桌子。例如:

data
-----
12345678911
12345678915
12345678911
12345678911
12345678914
12345678913
12345678912
Run Code Online (Sandbox Code Playgroud)

sql-server alter-table sql-server-2012

-2
推荐指数
1
解决办法
218
查看次数