标签: sql-server-2014

如何使用触发器中新插入的同一行的值更新列?

使用 SQL Server 2014,我有这个:

Table1
Tab1_id        int identity(1,1) primary key
Tab1_val1      smallint
Tab1_val2      smallint
Tab1_valInfo   varchar(10) -- not yet implemented, will be used only for presentation
Run Code Online (Sandbox Code Playgroud)
 Tab1_id |   Tab1_val1 |   Tab1_val2 | Tab1_valInfo
---------|-------------|-------------|--------------
       1 |          25 |          19 | 0025-0019
       2 |           0 |           5 | 0000-0005
       3 |          12 |           3 | 0012-0003
Run Code Online (Sandbox Code Playgroud)

现在,凭借我相当短的 SQL 经验,我正在尝试的是:

在应用程序中,插入数据所需的唯一输入值是Tab1_val1Tab1_val2,然后创建一个更新列的触发器Tab1_valInfo

create trigger utr_ValInfo on Table1
after insert as
begin

    declare @size int = 4;

    declare …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server update sql-server-2014

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

为什么向视图添加列会损坏表值函数?

我有一个 TVPmyTVP实现为select val.* from vw_MyView val. 前几天,我修改了vw_MyView,将: 替换
select Foo,Bar from DB
select Foo, Bash, Bar from DB

这有一个奇怪的副作用:调用select Bar from myTVP()返回一个名为Bar填充了内容的列Bash(尽管事实上BarBash甚至没有相同的类型)。

展示问题的匿名计划:https://www.brentozar.com/pastetheplan/?id=ryJLJmqdl

请注意,Object2Object1是相同的,但两个计划之间最左侧嵌套循环的输出列表完全不同。

笔记:

  • 使用中没有计划提示。未设置跟踪标志。
  • CheckDB 没有发现错误。
  • 使用选项(重新编译)并没有解决问题。
  • 在 TVP 上运行右键单击 alter 且不进行任何更改修复了该问题。
  • 在名称更改的 TVP 上运行右键单击 alter 修复了该问题,但新的 TVP 除名称外与之前的相同。
  • 使用SQL 2014标准版。

问题:

  1. 向视图添加新列以更改对该视图的其他引用所使用的视图列是否正常?
  2. 在什么情况下向视图添加列会导致这种行为?

sql-server view sql-server-2014 set-returning-functions

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

关于透明数据加密的澄清

这是我们第一次在至关重要的生产数据库上应用 TDE,我有以下问题。

当 TDE 正在进行时:

  1. 我们仍然可以使用连接字符串访问正在该数据库上运行的应用程序吗?
  2. 如果 TDE 在加密数据库时失败,是否会破坏 .mdf 文件?我将如何恢复数据库?
  3. .ldf 和 .mdf 是否仍然可以访问,我们可以读取和写入这些文件吗?
  4. TDE进行过程中哪些数据库操作会受到影响?
  5. TDE 会对磁盘使用产生影响吗?
  6. TDE对数据库备份有影响吗?如果启用 TDE,.bak、.trn 文件是否都会自动加密?
  7. 在应用TDE的过程中,我们需要重点关注哪些方面?是否需要停电?
  8. 对 SQL Server 服务包或累积更新会有影响吗?

相关平台是具有可用性组的 SQL Server 2014 SP2 GDR。

sql-server encryption availability-groups transparent-data-encryption sql-server-2014

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

如果我能够通过 sqlcmd 连接到服务器,为什么还需要 DAC?

当我无法使用传统方式连接到SQL Server(原因是删除登录触发器)时,DAC引起了我的注意。我在网上做了一些搜索,结果发现访问服务器的唯一方法是使用 DAC 连接,不幸的是默认情况下该连接是关闭的。但是,我仅使用 sqlcmd 就能够解决这个问题(我删除了触发器)。

我的问题是,如果我可以仅使用 sqlcmd 连接到 SQL Server,那么 DAC 的用途是什么?

trigger sqlcmd logins sql-server-2014 dac

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

为什么即使统计数据正确也会发生 TempDB 溢出?

我阅读了Brent Ozar 发表的一篇很棒的文章,并提出了一些与内存授予相关的问题。我无法在他文章的评论部分回答我的问题,所以我想从这里得到任何帮助。

  1. 问题:有多少数据溢出到磁盘中? 400 MB还是60 MB (7643KB*8)?

他在文章中指出:

而且无论我更新统计信息多少次,我仍然会得到大约400MB 的磁盘溢出。

我在这里有点困惑(

在此处输入图片说明 在此处输入图片说明

  1. 问题:如果估计一切正常,统计数据是最新的,盒子有足够的内存,并且当时没有查询在运行,那么为什么会发生溢出到磁盘?

查看估计的行数与实际的行数。它们是相同的。统计数据很好。

我也没有使用小型服务器:我的虚拟机有 32GB 的 RAM,我已将其中的 28GB 分配给 SQL Server。没有其他查询同时运行——这只是一个孤独的查询,溢出到磁盘......

在此处输入图片说明

memory statistics tempdb sql-server-2014 memory-grant

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

如何修复将 sp_whoisactive 结果记录到表中的错误?

有一个从这里建模的 sql 代理作业,它使用 sp_whoisactive 将结果捕获到表中。99% 它工作正常,但 sql 代理作业时不时会失败并出现以下错误:

Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Violation of PRIMARY KEY constraint 'PK__#ADDF8B9__69B13FDC8C10EA7F'. Cannot insert duplicate key in object 'dbo.@blockers'. The duplicate key value is (623). [SQLSTATE 23000] (Error 2627) The statement has been terminated. [SQLSTATE 01000] (Error 3621) Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Warning: Null value is eliminated by …

sql-server sql-server-2014 sp-whoisactive

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

为什么当我关闭 SQL Server 故障转移群集实例中的 SQL 服务时,没有发生自动故障转移?

我遇到了与自动故障转移相关的异常行为,因此在关闭 SQL Server 服务的情况下自动故障转移不起作用。集群磁盘似乎仍然连接到故障节点,但我无法找出导致此行为的最终问题。如果您能帮助我理解这个问题,我将非常感谢您。

出于测试目的,我在域控制器上创建了 iSCSI 目标,并连接了 2 个启动器:

在此输入图像描述

以下是有关我的集群的详细信息:

在此输入图像描述 在此输入图像描述 在此输入图像描述

以下是有关我的 SQL Server 服务的详细信息:

在此输入图像描述 在此输入图像描述 在此输入图像描述

以下是有关集群磁盘的详细信息(我只添加了其中一个磁盘的详细信息,因为两个磁盘是相同的):

在此输入图像描述 在此输入图像描述

现在,当我关闭 SQL Server 服务时,不会发生服务的自动故障转移:

在此输入图像描述

我测试了自动故障转移成功运行的其他场景:

  1. 手动故障转移
  2. 关闭活动节点
  3. 在活动节点上禁用适配器
  4. 在任务管理器中杀死sql server进程
  5. 在任务管理器中杀死sql代理服务进程

在上述所有场景中,资源均成功故障转移到另一个节点。

您能否帮我弄清楚当我关闭活动节点上的 SQL Server 服务时自动故障转移出了什么问题?

sql-server clustering failover sql-server-2014 failover-cluster-instance

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

遍历表中的所有记录并在 SQL Server 中编辑列

如何遍历 SQL Server 表中的所有行并编辑列?你知道的:

  • 跳过了很多ID。
  • creatie每次一分钟都必须对该列进行编辑。所以第一个必须是 15:00:00,第二个 15:01:00,第三个 15:02:00 等等。
  • 总共有 54 条记录。
  • 我使用的是 SQL Server 2014 Express 版本

我使用了下面的查询,但最大 ID 是 24697...所以循环很长。

declare @var datetime = '2015-10-19 0:0:0';
declare @counter int = 1;
declare @max int = (select max(id) from topic);

while (@counter <= @max) begin
    update Topic set Creatie = Creatie + @var where id = @counter;
    set @counter += 1;
    set @var += '0-0-0 0:1:0'
end;
Run Code Online (Sandbox Code Playgroud)

因为我每次都这样做@var += '0-0-0 0:1:0',我不知道 24697 次后的结果是什么(如果它有效)。

这是前 25 …

sql-server update sql-server-2014

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

如果不存在则更新语句

如果我有一个包含 2 列的简单表和一个由两列组成的复合主键,我该如何重命名其中一列,但前提是它不会导致主冲突?

这是一个简化的示例。

拿下表:

User  | Role
------|----------------
Joe   | User
Joe   | Administrator
Brian | User
Anna  | Administrator
Anna  | Admin
Run Code Online (Sandbox Code Playgroud)

假设我想编写以下查询:

UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'
Run Code Online (Sandbox Code Playgroud)

在不使用游标的情况下,如何更改 SQL 更新语句以避免重命名 Anna(因为该用户已经具有 Admin 角色),但仍重命名 Joe?

甚至可以使用基于集合的 SQL 还是使用游标是唯一的方法?

谢谢。

sql-server t-sql update sql-server-2014

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

哪些 SET 选项会影响计划重用以及如何在 T-SQL 中获取它们的值?

当存储过程在任何时候从管理工作室运行良好时,我正在对这种情况进行故障排除,但即使对于相同的参数,相同的存储过程在其中一个网络服务器中运行得非常糟糕。可能有一些原因导致这种情况,包括阻塞等。

我想排除使用不同 SET 选项创建 2 个不同计划的可能性,并且这些计划中至少有一个使用产生错误计划的参数组合进行了优化。

引用本杰明·内瓦雷斯:

“一般来说,查询优化是一个代价高昂的操作,为了避免这种优化成本,计划缓存会尽量将生成的执行计划保存在内存中,以便它们可以被重用。但是,如果一个新的连接运行相同的存储过程有不同的SET选项,它可能会生成一个新的计划……”

为了解决这个问题,我想要一个 T-SQL 查询,它会显示为会话设置的所有值。

这可能吗?

以下 SET 选项将影响执行计划的重用:

(他们中的一些)

DATEFORMAT
LANGUAGE
NUMERIC_ROUNDABORT
FORCEPLAN

performance sql-server optimization plan-cache sql-server-2014 query-performance

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