小编Rac*_*SQL的帖子

在链接服务器上使用视图时出错

我有这个查询:

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)

sql-server-2008 sql-server view linked-server

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

索引过多的表怎么办?

我是这家公司的新 DBA。我看到他们的一些表有很多索引;例如,有些超过 50 或 60。

这是一件好事吗?从我的研究来看,这似乎对性能不利。

你会如何处理这个?

我想删除所有索引并从 0 开始。我认为开发人员一直在使用 Tuning Advisor 并没有真正了解索引。

index sql-server-2008 sql-server

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

是否可以将 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
查看次数

如何做 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 脚本以 ANSI 编码运行?

也许这是一个愚蠢的问题,或者我问错了。

我如何确定脚本(包含数千行)正在使用 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)

sql-server sql-server-2008-r2 encoding unicode

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

为什么我的数据库使用分区?(我知道不是)

运行此查询:

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 sql-server

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

为新表中的每一列创建索引是个好主意吗?

我将缩短我的问题。(SQL-Server 2008)

在创建新表时,为每一列创建索引是个好主意吗?

我为什么要说这个?

今天我正在创建一个数据库,我的老板在我身后,他说:

“哦,为每一列创建一个索引很好”(然后他向我展示了这样做的图形方式)。

我现在正在研究索引,我不确定这是否是个好主意,因为每次表上有插入\更新时,每个索引都会更新。

一些建议?

index sql-server

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

“等效 ISO 标准”实际上是什么意思?

我正在阅读有关比较运算符的信息。在文档中,比较运算符被 ANY、SOME 或 ALL 修改(强调添加):

引入子查询的比较运算符可以通过关键字 ALL 或 ANY 进行修改。SOME 是 ANY 的等效 ISO 标准。

这是什么意思?

sql-server terminology sql-standard sql-server-2014

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

在选择中使用 COLUMN AS (left([Another_Column],(4)) 而不是 LEFT 是个好主意吗?

我遇到了一张这样的表:

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,这里只是使用空间。

在需要时在选择期间选择该字段不是更好吗?

sql-server t-sql sql-server-2008-r2

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

在 INNER JOIN 内改进 OR

我有这个查询。这是第二个查询。第一个是在子查询之外使用左侧/或外部,查询计划很糟糕。(用完整的语法编辑了问题):

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%。

performance sql-server sql-server-2008-r2

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