我有这个查询:
SELECT
-
FROM -.dbo.tb1
WHERE
-IN
(
SELECT
CASE
WHEN EXISTS
(
SELECT *
FROM -.dbo.tb2U1 WITH (NOLOCK)
WHERE col1 = '8614'
)
THEN
(
SELECT TOP (1)
CASE WHEN ISNULL(col2,0) IN (1,2,3,6,8)
THEN '2'
ELSE '1'
END AS col3
FROM -.dbo.tb1U1 WITH (NOLOCK)
LEFT join -.dbo.tb3U2 WITH (NOLOCK)
ON U1.-= U2.-
WHERE
-= '8614'
ORDER by
-DESC
)
ELSE '3'
END
);
Run Code Online (Sandbox Code Playgroud)
当我运行它时-,它没问题。它返回我想要的东西:
SELECT
-
FROM -.dbo.tb1
WHERE
-IN
(
SELECT
CASE
WHEN EXISTS
(
SELECT …Run Code Online (Sandbox Code Playgroud) 我是这家公司的新 DBA。我看到他们的一些表有很多索引;例如,有些超过 50 或 60。
这是一件好事吗?从我的研究来看,这似乎对性能不利。
你会如何处理这个?
我想删除所有索引并从 0 开始。我认为开发人员一直在使用 Tuning Advisor 并没有真正了解索引。
我们正在创建一个仓库系统。在这个系统中,我们将有一个提取页面(我不知道这个词是否适合描述它,但它与我们银行账户中的日志相同,我们在那里进行所有交易,带有值,然后,将其减去总价值,我猜这是银行提取物)。
我们需要一张像这样的表:
该表将包含来自财务票据的所有交易(包括产品的进入和退出)。如果您注意到,您可以看到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) 也许这个问题很难理解(因为我英语不流利)但是,我需要选择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)
有没有办法让这个查询,一个独特的查询?并且,有没有办法命名这些列?因为我知道我需要给它们取别名,但它们仍然保留在上面的那个(没有列名)。
也许这是一个愚蠢的问题,或者我问错了。
我如何确定脚本(包含数千行)正在使用 ANSI 编码运行?
假设我们使用 Notepad++ 创建了一个脚本(程序员同时为 SQL 和 ORACLE 编写代码),并使用ANSI 编码保存它:
好的。然后,我们的脚本中有一个Â字符。如果我们的客户只是将此脚本复制到使用不同编码的某个工具中(真的,我不知道为什么,但有些用户这样做,我确定这不是为了发现错误),这Â 将被转换为:
,但是由于我们的脚本有数千行,所以在客户端没有人会注意到这一点。
我们知道用户不会看到这一点,他们不会阅读整个脚本以确保一切正常。即使是付费的 DBA 也不会这样做(我是 DBA,我肯定会一直阅读所有脚本)。
那么,我怎么能确定,当用户按下 时F5,所有脚本都是用 ANSI 编码的,就像我们发送它的方式一样,没有这些奇怪的字符?我们只能通过正确的数据库整理来实现这一点吗?
我试图在脚本的第一行用 a case when asci character = the ascii(character) then ok else ERROR( using ascii to test )思考这样的事情:
Select CHAR(ASCII('ã')) As Teste_CHAR, CHAR(227) as Teste_CHAR_ASCII
Run Code Online (Sandbox Code Playgroud)
所罗门,这是查询:
Select *,
Case
When Teste_CHAR=Teste_CHAR_ASCII
Then 'OK'
Else 'Erro'
END as STATUS_TESTE,
Case
When Teste_CHAR=Teste_CHAR_ASCII
Then 'Everything is OK'
Else 'Script will not …Run Code Online (Sandbox Code Playgroud) 运行此查询:
select * from sys.dm_db_persisted_sku_features
Run Code Online (Sandbox Code Playgroud)
显示我正在使用分区:
| feature_name | feature_id |
|--------------|------------|
| Partitioning | 200 |
Run Code Online (Sandbox Code Playgroud)
我很确定我没有使用分区,因为这个数据库只是我的,它是用于咨询的。我使用简单的“创建表”语句创建了 3 个表。表上也没有索引。那么,为什么SQL Server 会说这个数据库是使用分区的呢?
我将缩短我的问题。(SQL-Server 2008)
在创建新表时,为每一列创建索引是个好主意吗?
我为什么要说这个?
今天我正在创建一个数据库,我的老板在我身后,他说:
“哦,为每一列创建一个索引很好”(然后他向我展示了这样做的图形方式)。
我现在正在研究索引,我不确定这是否是个好主意,因为每次表上有插入\更新时,每个索引都会更新。
一些建议?
我正在阅读有关比较运算符的信息。在文档中,比较运算符被 ANY、SOME 或 ALL 修改(强调添加):
引入子查询的比较运算符可以通过关键字 ALL 或 ANY 进行修改。SOME 是 ANY 的等效 ISO 标准。
这是什么意思?
我遇到了一张这样的表:
CREATE TABLE TABLE1
(
CD1 int
,CD2 varchar(16)
,CD3 varchar(21)
,CD4 decimal(14,0)
,CD5 varchar(4)
,CD6 decimal(18,2)
,CD7 AS (left([CD3],(4)))
)
Run Code Online (Sandbox Code Playgroud)
该表有超过 40 亿行(完全没有必要,但这是另一个主题)。
正如您在最后一列中看到的,它们使用AS (left([CD3],(4))). 我认为这是非常无用的,因为我们几乎从来没有在这个表上有一个 SELECT,这里只是使用空间。
在需要时在选择期间选择该字段不是更好吗?
我有这个查询。这是第二个查询。第一个是在子查询之外使用左侧/或外部,查询计划很糟糕。(用完整的语法编辑了问题):
https://www.brentozar.com/pastetheplan/?id=HJEioh56N
我nested loop (inner join)在查询计划中有 97%。
我确定问题出OR在第二个连接内部,因为我在这里和那里更改了一些东西,我可以摆脱它们,但我想确定处理此类数据的最佳方法是什么。所有这些表也有数百万行。
表定义:
CREATE TABLE [DBO].[TABLE1](
[F1] [int] NOT NULL,
[F1] [varchar](16) NOT NULL,
[F3] [money] NOT NULL,
[F4] [money] NOT NULL,
Run Code Online (Sandbox Code Playgroud)
我知道创建了这个索引:
在 DBO.TABLE1 ( F1, F2 ) 上创建非聚集索引 IX_TB1
该索引搜索现在是 14%,但HASH MATCH成本为 82%。
sql-server ×10
index ×2
encoding ×1
performance ×1
sql-standard ×1
t-sql ×1
terminology ×1
unicode ×1
view ×1