无论如何要更改列数据类型,以便它只接受负值?
它是 SQL Server 2014 Azure。
我有一个表 (Database2.dbo.OrganizerDataDependencyChange),其中包含有关某些其他表中的行上次更改时间的信息。在这些表中的每一个上,我都有一个触发器,它调用一个存储过程 (Database2.dbo.SaveOrganizerDataDependencyChange),该过程简单地用触发器触发的时间更新 Database2.dbo.OrganizerDataDependencyChange。这些触发器是从 Database1 或 Database2 触发的,因此它们通常是跨数据库调用。
当更新表上的两个不同行时,我在 Database1.dbo.OrganizerDataDependencyChange 表上遇到读写死锁,我不明白为什么。表上只有一个索引,而且它是完全覆盖查询的聚集索引,因此不可能出现查找死锁,尽管 proc 中有两条语句,但我特地将其重写为我所理解的最佳方法避免并发问题,使用 WHERE NOT EXISTS 而不是使用 IF/ELSE 逻辑,所以它不应该从不同的角度出现在这个索引上,对吗?由于它是在触发器和跨数据库中触发的,因此我在重现该问题时遇到了一些困难,我当然可以重现阻塞,但这应该没问题,这正是我所期望的。
有人可以帮助我了解这里发生了什么吗?我可能可以使用 NOLOCK 提示或 applock 修复它,但我仍然不明白为什么会发生这种情况。
这是表:
CREATE TABLE [dbo].[OrganizerDataDependencyChange](
[TableID] [INT] NOT NULL,
[Database] [VARCHAR](150) NOT NULL,
[Updated] [DATETIME] NULL
)
CREATE CLUSTERED INDEX [CX_OrganizerDataDependencyChange_TableID_DB] ON [dbo].[OrganizerDataDependencyChange]
(
[TableID] ASC,
[Database] ASC
)
Run Code Online (Sandbox Code Playgroud)
这是存储过程:
CREATE PROCEDURE [dbo].[SaveOrganizerDataDependencyChange]
(
@TableID int,
@Database varchar(150)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @rowcount INT;
INSERT INTO dbo.OrganizerDataDependencyChange
( TableID, [Database], Updated )
SELECT TOP …Run Code Online (Sandbox Code Playgroud) 当下表中的 Flag 值为 1 时,我需要触发器帮助以防止更新列 Flag 之外的任何列(可以更新):
CREATE TABLE Tmp (Id INT, Type INT, TranDate DATE, Flag INT)
INSERT INTO Tmp VALUES (1, 2, '2017-04-24', 0)
INSERT INTO Tmp VALUES (2, 4, '2017-04-27', 1)
Run Code Online (Sandbox Code Playgroud)
我已尝试使用以下代码,但无法正常工作。
CREATE TRIGGER [dbo].[Prevent_Update_Trigger]
ON [dbo].[Tmp]
FOR UPDATE
AS
SET NOCOUNT ON
IF EXISTS(SELECT NULL FROM dbo.Tmp t JOIN inserted i ON t.Id=i.Id AND t.Flag=1)
BEGIN
RAISERROR('You can not update when Flag value is 1', 16, 1)
ROLLBACK TRAN
SET NOCOUNT OFF
RETURN
END
SET NOCOUNT …Run Code Online (Sandbox Code Playgroud) 所以我需要创建一个触发器,为每个案例创建一个新的证据编号。例如,案例 #1 可以有证据 # 的 1、2、3、4 等等。案例 #2 也可以有证据 # 的 1、2、3 等。
所以我有一个“Case”表(CaseID 为 PK)和一个“Evidence”表(EvidenceNum 为 PK,CaseID 为 FK 和相关属性)
因此,每次我搜索特定的 caseID 时,我都希望填充一个新的“EvidenceID”列。例如证据项目#1、#2 等。所以这些数字可以在每种情况下重复。因此,为什么这不是主键。EvidenceNum 是主键,但最终用户不会看到它。有什么帮助吗??
我在我的计算机上运行了 SQL Server 2014 和一个compatibility_level值为 100的数据库(SQL Server 2008)。我认为这足以在 SSMS 中编写仅适用于 SQL Server 2008 及更低版本的查询,但出于某种原因,SSMS 运行使用OVER (PARTITION BY ...)仅适用于 2012 及更高版本的子句(带有 BETWEEN 参数)的查询。
我们的软件需要与 2008 R2 及更高版本兼容。如果我编写的查询与 2008 R2 不兼容,是否有我可以更改的设置会导致我的查询在 SSMS 中失败?
设置脚本
CREATE TABLE t2 ( [col1] INT, [col2] INT );
DECLARE @int INT;
SET @int = 1;
WHILE (@int <= 1000)
BEGIN
INSERT INTO t2
([col1], [col2])
VALUES (@int*2, @int*2);
SET @int = @int + 1;
END
GO
create clustered index cl on t2(col1)
create index ncl on t2(col2)
Run Code Online (Sandbox Code Playgroud)
我运行一个简单的更新并在读提交隔离级别保持事务打开。
begin tran
update t2 set [col2]=[col2]+1 where col1=6
Run Code Online (Sandbox Code Playgroud)
如果我在另一个会话中检查 sp_lock,我会得到以下结果
我想了解的是非聚集索引(indid 2)上的键锁。为什么非聚集索引上有两个键锁?
如果我检查第 248 页上的 dbcc 页面,我可以找到明显的一个 ((1bfceb831cd9)),它是记录 6 的条目的锁,该条目已更改为 7。下面 DBCC PAGE 的输出
我想了解的是另一个键锁(5ebca7ef4e2c)的目的是什么以及它的锁定是什么。
我们拥有使用相同 AD 级别服务帐户的 SQL Server 服务和 SQL Server 凭据。
由于最近的安全更改,我们需要在 AD 级别更改服务帐户密码。
在这个阶段 :
如果我先用新密码更改我的 SQL Server 凭据密码,它会直接应用于使用相同服务帐户的 SQL Server 服务帐户吗?
如果有任何机会:
我们是否需要先在配置管理器中更改 SQL Server 帐户,然后再更改凭据帐户密码?
请说清楚。
首先,我不是专业的 IT 人员。我从戴尔为我们的极小型企业购买了一台服务器。它附带已安装的 Windows Server 2012 R2 Essentials。请注意,我得到这台服务器的主要原因是我们使用的一个设计软件必须利用 SQL Server,以便所有工作站共享数据文件。软件公司来为我进行设置并说我们无法在域控制器上安装 SQL Server 2014(对于为什么我仍然有点不知所措)。
我的问题如下:
– 有没有办法格式化服务器并重新安装 WS 2012 R2 E 而不将其设置为域控制器,以便 SQL Server 2014 可以工作?
其他信息,如果它可能相关:
该服务器是新的,上面没有相关信息或数据,因此可以擦除它(假设这意味着在其上重新安装 WS)。
这是一款 AutoDesk 产品。
我们正在使用 Microvellum。
在研究不同的查询计划以提高性能时,我注意到 FETCH 正在隐式转换为bigint.
示例表和查询:
CREATE TABLE checkPagintion
(
Id INT NOT NULL PRIMARY KEY CLUSTERED,
Name NVARCHAR(100)
)
DECLARE @paramPageNumber AS INT,
@paramPageSize AS INT;
SELECT *
FROM checkPagintion
ORDER BY Id
OFFSET @paramPageNumber ROWS
FETCH NEXT @paramPageSize ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
此查询的执行计划:
我的问题:我应该对所有分页查询使用 bigint 吗?如果我使用 int 会不会有问题,因为implict_conversion 以性能低下着称?
sql-server type-conversion offset-fetch paging sql-server-2014
使用 Sql Server 2014,我有几个表,其中 PK 字段是 int,但我也有一个需要查询的 UniqueIdentifier 字段。该字段将始终是唯一的。
我正在为这些添加索引,并且可以选择Index或Unique Key。
选择其中一个有什么好处吗?
sql-server-2014 ×10
sql-server ×8
trigger ×2
azure-vm ×1
constraint ×1
deadlock ×1
index-tuning ×1
insert ×1
installation ×1
locking ×1
offset-fetch ×1
paging ×1
password ×1
ssms ×1
update ×1