小编Nei*_*l P的帖子

如何索引不等式查询?

我有一个基于浮点列值排除数据的查询

select * 
from My_Table
where my_Float_column != 0 and my_Float_column is not null
Run Code Online (Sandbox Code Playgroud)

如果可以的话,我不想索引浮点类型。执行计划是否足够聪明以使用像下面这样的过滤索引(我只索引 0 和 null 值)来提高性能?

CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered
    ON My_Table (my_Float_column)
    WHERE my_Float_column = 0 or my_Float_column is null
Run Code Online (Sandbox Code Playgroud)

index sql-server sql-server-2008-r2

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

SQL Server - 为什么更新语句中不允许使用窗口函数?

运行更新语句时,例如下面的语句,我收到一条错误消息,告诉我

窗口函数只能出现在 SELECT 或 ORDER BY 子句中。

UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用可更新的 cte 轻松解决,如下所示

 WITH my_cte AS (
     SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag
     FROM Dim_Chart_of_Account
)
UPDATE my_cte
SET [Account_Order] = acc_order_lag
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有任何原因在更新语句中不允许这样做,我是否应该避免使用可更新的 cte 作为解决方法?

我担心的是在使用带有更新语句的窗口函数时会出现问题,因此我想了解这是一种可接受的方法还是应该避免的方法。

sql-server sql-server-2014

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

删除到新表(如选择进入)

select into 语法将创建一个新表以将数据插入其中(我知道类型可能不一致等,但它为您提供了一个粗略的副本)。

delete output into 语句是否也可以以相同的方式创建新表,而不必先定义表?

sql-server t-sql

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

sys.partitions 行计数严重错误 - 如何纠正?

查询 sys.partitions 可以返回表的近似行数。

我注意到,无论实际内容如何(即使是空分区),这都会为所有分区返回相同的行数。

该表具有聚集列存储索引,并且几乎所有列上都创建了统计信息。每次数据加载后,每天都会更新统计信息。该表按日期分区。

sys.partitions 查询:

    SELECT   convert(date, convert(varchar,rv.[value])) as partitionDate, p.rows as syspartitions_RowCount
        FROM       sys.tables t     
        join       sys.schemas  sc on sc.schema_id = t.schema_id        
        JOIN        sys.partitions p                ON      p.[object_id]         = t.[object_id]
        JOIN        sys.indexes i                   ON      i.[object_id]         = p.[object_id]
                                                    AND     i.[index_id]          = p.[index_id]
        JOIN        sys.data_spaces ds              ON      ds.[data_space_id]    = i.[data_space_id]
        LEFT JOIN   sys.partition_schemes ps        ON      ps.[data_space_id]    = ds.[data_space_id]
        LEFT JOIN   sys.partition_functions pf      ON      pf.[function_id]      = ps.[function_id]
        LEFT JOIN   sys.partition_range_values rv   ON      rv.[function_id]      = pf.[function_id]
                                                    AND     rv.[boundary_id]+1      = p.[partition_number]
        WHERE   p.[index_id] …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning azure-sql-data-warehouse

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

rowversion 在整个数据库中是唯一的吗?还是每桌?

如果我在数据库中的两个不同表上有一个 rowversion,它们是否保证在两个表中都是唯一的?如果没有,有没有办法设置这种行为?

我有一个将两个表连接在一起的视图,我想知道是否可以保证这种行为,以便我可以从任一表中获取最大的行号,以形成视图的行版本。

sql-server

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

SQL Server 中是按批次还是按会话进行隐式事务?

想象一下,我正在通过管理工作室运行多个批次,由 GO 命令分隔。我想知道隐式事务的行为方式 - 事务是按批次提交还是在整个执行过程中提交一次。

sql-server t-sql transaction

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

同义词会影响远程查询性能吗

我有一项任务需要将现有数据库迁移到新服务器。

有问题的数据库具有查询同一服务器上的另一个数据库的存储过程,不会移动第二个数据库。

我很想使用同义词指向链接服务器上的另一个数据库,因为这将使设置和维护变得非常容易,但是我想知道同义词是否可能导致执行计划的性能问题,或者如果只是跨服务器查询是问题所在。

sql-server sql-server-2014

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

为什么 varchar(255) 列的表比使用正确数据类型的相同表占用的空间更少

我有两个相同的表并保存相同的数据行。

一个为表的每一列使用 varchar(255),另一个为每列正确键入(使用日期、整数、十进制等)。

使用 Management Studio 的属性窗口,我可以看到将所有数据存储为 varchar 的表要小得多,这不是我期望看到的。我的理解是 int 只使用 4 个字节的空间,因此使用的空间比存储为 varchar 的 int 少得多。

我应该寻找什么来了解这里发生的事情?两个表在 int 列上都有一个主键,没有其他索引。出于测试目的,它们填充了来自同一源查询的相同数据集。

sql-server datatypes sql-server-2014

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

如何在 sql azure 数据仓库中添加检查约束?

我想向 azure数据仓库中的表添加检查约束。

我有以下脚本:

alter table [FactTbl_Test] add constraint Ck_Test_id check ([Test_Id] != 'Unknown')
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

第 2 行解析错误,第 74 列:'check' 附近的语法不正确。

编辑:

如果在表声明中创建约束,也会出现相同的错误。

azure-sql-data-warehouse

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

查找用户已明确授予对象权限的所有实例

是否可以为某个用户生成用户已获得显式访问权限的对象列表?

我想查看用户拥有明确权限的所有项目的列表,不包括通过角色等继承的任何权限。

sql-server permissions sql-server-2014

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