我在 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
在 Microsoft SQL Server (2014) 中,可以在不区分大小写和区分大小写的排序规则之间进行选择。
我使用区分大小写的排序规则的原因是"test" = "TEST"return false。
然而,我想保留的是,当表"TEST"存在时,编写类似的查询select * from test;仍然有效。当数据库有区分大小写的排序规则时,它不会,因为我需要像这样写select * from TEST;
有没有办法分别设置“对象整理”和“字符串整理”?
我正在与一位更有经验的数据库管理员合作,他希望我将我创建的数据库发送给他。但是,我无法弄清楚数据库在磁盘上的存储位置。我正在使用 Microsoft SSMS。
集群索引和非集群索引创建后,当我们删除它们时会发生什么?
根据 Clustered Index ,叶子级别的数据会发生什么?
sql-server clustered-index sql-server-2008-r2 nonclustered-index sql-server-2014
我正在尝试将 MS SQL Server 2012 (sp3) 升级到 SQL Server 2014。
在升级结束时,几个组件失败并显示错误,
“错误详细信息:安装 SQL Server 数据库引擎服务实例功能时出错,无法创建新文件夹 'H:\MSSQL11_MSSQLSERVER_Backup_Dir'。指定的路径无效(例如,它位于未映射的驱动器上)。错误代码:0x84CF000E”
此服务器没有 H:\ 驱动器。据我所知,它从来没有H盘。我该如何纠正?
我们正在创建一个仓库系统。在这个系统中,我们将有一个提取页面(我不知道这个词是否适合描述它,但它与我们银行账户中的日志相同,我们在那里进行所有交易,带有值,然后,将其减去总价值,我猜这是银行提取物)。
我们需要一张像这样的表:
该表将包含来自财务票据的所有交易(包括产品的进入和退出)。如果您注意到,您可以看到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) 我们在一个名为的数据库上有几个表mydb,应用程序使用它来存储或检索记录。不知何故,有人更改了test表上的值,这导致了一个严重的问题。
我们从不同来源接收常量数据,当数据在表上更新时,触发器会触发并检查特定值,如果值为 360,则它将更新行,否则它什么都不做。
现在我有两个问题:
user. 现在谁使用该帐户登录? 表上的值本应为 350,但已更改为 800。
有小费吗?
我有一个更新后触发器,它将记录 ID 排队到另一个表中,以便稍后进行进一步处理。它用于inserted获取要处理的记录的 ID。
如果唯一的更改是某一特定列,我现在想排除排队到该表的某些记录。如果该列之外的任何其他列发生更改,我仍然想将记录排队。
如何确定是否仅更改了一个特定列?
我看过UPDATE(),但似乎我需要列出表格中的所有其他 47 列,这是我想避免的。
COLUMNS_UPDATED如如何使用 COLUMNS_UPDATED 来检查某些列是否已更新?看起来很有希望,但我无法让它发挥作用。我想排除的列的 ColumnID 为 30。根据我的计算,这给了我536,870,912 ( SELECT POWER(2, 30 - 1))的整数位掩码。
当我只对列进行 UPDATE 时,我想排除COLUMNS_UPDATED()返回的0x000000200040。这将给出一个位模式,表明更新了两个完全不同的列。列 ID 为 7 (2^(7-1)=64) 和 22 (2^(22-1)=2,097,152)。
我不确定采用这种方法是否值得。似乎可以轻松比较其他字段的任何更改。
更新: 我已经在插入和删除之间使用 CHECKSUM 比较其他字段。我不想使用这种方法,因为如果将来将其他字段添加到表中,它可能会导致问题。也有可能发生哈希冲突。
也许这个问题很难理解(因为我英语不流利)但是,我需要选择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)
有没有办法让这个查询,一个独特的查询?并且,有没有办法命名这些列?因为我知道我需要给它们取别名,但它们仍然保留在上面的那个(没有列名)。
使用以下代码,我使用 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)