标签: sql-server-2014

相同的模式、相同的数据、相同的执行计划?

我在 SQL Server 2014 SP2 中有一个 T-SQL 存储过程,它在服务器上花费的时间是我在本地环境中花费的时间的 3 倍。

我将本地数据库恢复到服务器上的数据库,因此架构和数据是相同的。

我是一名程序员,并不是真正的 DBA,所以请耐心等待。

在您查看 XML 之前,执行计划似乎是相同的。在我的本地环境中,Stream Aggregate 用于其中一个查询以进行不同的选择,而在服务器上,它看起来像是 Sort 与散列一起使用。

服务器的处理器比我的(野兽)本地机器少的事实似乎导致了这个问题。每个查询在服务器上都需要更长的时间。这可能是在服务器上选择排序/散列而不是流聚合的原因吗?

有没有办法强制流聚合?

这是存储过程的 SQL:http : //pastebin.com/kkXM3Bsf

这是我本地环境的执行计划:http : //pastebin.com/0u7SHxnM

这是服务器的执行计划:http : //pastebin.com/9sE9DfM0

sql-server execution-plan sql-server-2014

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

在保持字符串区分大小写的同时,可以使数据库对象不区分大小写吗?

在 Microsoft SQL Server (2014) 中,可以在不区分大小写和区分大小写的排序规则之间进行选择。

我使用区分大小写的排序规则的原因是"test" = "TEST"return false

然而,我想保留的是,当表"TEST"存在时,编写类似的查询select * from test;仍然有效。当数据库有区分大小写的排序规则时,它不会,因为我需要像这样写select * from TEST;

有没有办法分别设置“对象整理”和“字符串整理”?

sql-server collation sql-server-2014 case-sensitive

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

如何将数据库发送给其他人?

我正在与一位更有经验的数据库管理员合作,他希望我将我创建的数据库发送给他。但是,我无法弄清楚数据库在磁盘上的存储位置。我正在使用 Microsoft SSMS。

sql-server backup ssms sql-server-2014

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

聚集索引和非聚集索引创建后删除会发生什么

集群索引和非集群索引创建后,当我们删除它们时会发生什么?

根据 Clustered Index ,叶子级别的数据会发生什么?

sql-server clustered-index sql-server-2008-r2 nonclustered-index sql-server-2014

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

将 SQL Server 从 2012 (sp3) 升级到 2014 时出错

我正在尝试将 MS SQL Server 2012 (sp3) 升级到 SQL Server 2014。

在升级结束时,几个组件失败并显示错误,

“错误详细信息:安装 SQL Server 数据库引擎服务实例功能时出错,无法创建新文件夹 'H:\MSSQL11_MSSQLSERVER_Backup_Dir'。指定的路径无效(例如,它位于未映射的驱动器上)。错误代码:0x84CF000E”

此服务器没有 H:\ 驱动器。据我所知,它从来没有H盘。我该如何纠正?

sql-server sql-server-2012 sql-server-2014

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

是否可以将 LAG() 与 WHERE 一起使用?

我们正在创建一个仓库系统。在这个系统中,我们将有一个提取页面(我不知道这个词是否适合描述它,但它与我们银行账户中的日志相同,我们在那里进行所有交易,带有值,然后,将其减去总价值,我猜这是银行提取物)。

我们需要一张像这样的表:

在此处输入图片说明

该表将包含来自财务票据的所有交易(包括产品的进入和退出)。如果您注意到,您可以看到ID1 将出现在位置 1、2 和 4。我确实尝试使用LAG,但使用该LAG函数,它获得了ID3 值。

如何获得滞后值,但具有所需的产品 ID?我需要totalPR_ID = 1的最后一个值。

我试过这个:

begin tran
insert into almoxarifado.Movimentacao
  (produto_id,documento,data,saldo_anterior,entradas,saidas)
select
Lotes.produto_id as produto_id,
NF.numero as documento,
nf.data_cadastro as data,
>>The lag value would be here, I need this field, to be the last total value,
>>but from this specific product.
Lotes.quantidade as entradas,
0 as saidas
from Almoxarifado.Entradas
join Compras.Notas_Fiscais NF on Entradas.nota_fiscal_id = NF.id
join Compras.Notas_Fiscais_Produtos NFP on NFP.nota_fiscal_id …
Run Code Online (Sandbox Code Playgroud)

sql-server window-functions sql-server-2014

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

如何查找谁更改了 SQL Server 2014 中的表值?

我们在一个名为的数据库上有几个表mydb,应用程序使用它来存储或检索记录。不知何故,有人更改了test表上的值,这导致了一个严重的问题。

我们从不同来源接收常量数据,当数据在表上更新时,触发器会触发并检查特定值,如果值为 360,则它将更新行,否则它什么都不做。

现在我有两个问题:

  1. 我想知道谁在 4 天前更改了该值?
  2. 我在 SQL 服务器错误日志中没有看到任何成功登录(用户登录)。我假设有人使用了一个名为user. 现在谁使用该帐户登录?

表上的值本应为 350,但已更改为 800。

有小费吗?

sql-server audit sql-server-2014

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

检测触发器中是否只有一列发生变化

我有一个更新后触发器,它将记录 ID 排队到另一个表中,以便稍后进行进一步处理。它用于inserted获取要处理的记录的 ID。

如果唯一的更改是某一特定列,我现在想排除排队到该表的某些记录。如果该列之外的任何其他列发生更改,我仍然想将记录排队。

如何确定是否仅更改了一个特定列?

我看过UPDATE(),但似乎我需要列出表格中的所有其他 47 列,这是我想避免的。

COLUMNS_UPDATED如何使用 COLUMNS_UPDATED 来检查某些列是否已更新?看起来很有希望,但我无法让它发挥作用。我想排除的列的 ColumnID 为 30。根据我的计算,这给了我536,870,912 ( SELECT POWER(2, 30 - 1))的整数位掩码。

Windows 中的计算器告诉我设置第 30 位是正确的。 在此处输入图片说明

当我只对列进行 UPDATE 时,我想排除COLUMNS_UPDATED()返回的0x000000200040。这将给出一个位模式,表明更新了两个完全不同的列。列 ID 为 7 (2^(7-1)=64) 和 22 (2^(22-1)=2,097,152)。

在此处输入图片说明

我不确定采用这种方法是否值得。似乎可以轻松比较其他字段的任何更改。

更新: 我已经在插入和删除之间使用 CHECKSUM 比较其他字段。我不想使用这种方法,因为如果将来将其他字段添加到表中,它可能会导致问题。也有可能发生哈希冲突。

sql-server sql-server-2014

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

如何做 SUM() 但要遵循一些规则?

也许这个问题很难理解(因为我英语不流利)但是,我需要选择sum(cod)例如,但这sum()需要有以下规则:

第 1 部分:它必须是所有鳕鱼,除了21.

第 2 部分:另一列,有另一个sum(),但只有 cod 21。

这不是整个查询,但在此之后,我想我可以做到。

我试过这个:

select sum(vit_codigotiposexames) from 
    (
    select * from tb_vitima where vit_codigotiposexames  
        in (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22 )
    )Corpo_Delito,
sum(vit_codigotiposexames) from
    (
    select * from tb_vitima where vit_codigotiposexames  = 21 )
    )Cadaverico
Run Code Online (Sandbox Code Playgroud)

如果我只有

select sum(vit_codigotiposexames) from 
    (
    select * from tb_vitima where vit_codigotiposexames  
        in (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22 )
    )Corpo_Delito
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个查询,一个独特的查询?并且,有没有办法命名这些列?因为我知道我需要给它们取别名,但它们仍然保留在上面的那个(没有列名)。

sql-server sql-server-2014

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

可以向 SQL Server 添加一个 CLR 函数,但不能在同一程序集中添加第二个:加载错误的 DLL

使用以下代码,我使用 csc 来编译 dll。然后我将程序集添加到 sql server 2014 使用

CREATE ASSEMBLY ReplaceMultiWord from 'd:\bcp\ReplaceMultiWord.dll' WITH PERMISSION_SET = SAFE;
Run Code Online (Sandbox Code Playgroud)

然后成功添加了第一个功能

CREATE FUNCTION dbo.ReplaceMultiWord
(@inputString AS NVARCHAR(MAX), @replacementSpec AS XML) RETURNS NVARCHAR(MAX)
AS
EXTERNAL NAME ReplaceMultiWord.UserDefinedFunctions.ReplaceMultiWord;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试添加第二个功能时

CREATE FUNCTION dbo.CanReplaceMultiWord
(@inputString AS NVARCHAR(MAX), @replacementSpec AS XML) RETURNS BIT
AS
EXTERNAL NAME ReplaceMultiWord.UserDefinedFunctions.CanReplaceMultiWord;
Run Code Online (Sandbox Code Playgroud)

我收到错误

Could not find method 'CanReplaceMultiWord' for type 'UserDefinedFunctions' in assembly 'ReplaceMultiWord'
Run Code Online (Sandbox Code Playgroud)

下面是我的代码。为什么 sql server 看不到第二个函数?

using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Xml;

public partial class …
Run Code Online (Sandbox Code Playgroud)

sql-server c# sql-clr sql-server-2014

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