标签: sql-server-2014

添加聚集索引,我是否应该删除非聚集索引

我正在将聚集索引作为在线操作添加到具有 30 亿行的表中。到目前为止,它已经花费了 17 多个小时。如果我在另一个具有同样多行的表上再次执行此操作,我应该首先删除非聚集索引吗?

sql-server sql-server-2014

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

根据SQL C#中的条件增加每一行

我有一个 textBox 的值为 100,我想在 stock_out 列中增加该值,但只有直到 stock_out 列等于 stock_in 列,如果第一行值是 40 比第一行 stock_out 应该从 100 增加 10 比100(90) 的剩余值应在其下方的行中递增,然后在其下方的行中递增,直到需要为止(直到 100 为 0)。项目按 Item_Name 和 Bill No asc 排序。

Bill No   Item_Name   Stock_in  Stock_out  stock_in_hand
1          chicken       50        40           10
2          chicken       40         0           40
5          chicken       60        10           50
6          chicken       100       20           80
3          fish          100       30           70
4          fish          20        20            0
Run Code Online (Sandbox Code Playgroud)

要得到的结果。

Bill No   Item_Name   Stock_in  Stock_out  stock_in_hand
1          chicken       50        50           0
2          chicken       40        40 …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2014

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

JOIN 的替代方案

第一次触发

ALTER TRIGGER [dbo].[Price_Modified]
    ON [dbo].[stock_recieve]
    AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Stock_out) 
BEGIN
    UPDATE s
    SET value = new.Item_Price * new.Stock_out
    FROM stock_recieve AS s
    JOIN inserted AS new ON new.[Bill No] = s.[Bill No]
    JOIN deleted AS old ON old.[Bill No] = s.[Bill No]
END;
Run Code Online (Sandbox Code Playgroud)

第二个触发器。

 ALTER TRIGGER [dbo].[newval] 
      ON [dbo].[stock_recieve]
        AFTER UPDATE
    AS
    SET NOCOUNT ON;
    IF UPDATE (Stock_out) 
    BEGIN
        UPDATE s
        SET Uservalue = new.Item_Price * new.Stock_out
        FROM stock_recieve AS s
        JOIN inserted AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

将身份列重新播种回 0 会导致页面拆分吗?

以身份表作为聚簇主键的简单表。我们意外地达到了该列的最大值,因此我要求我们的 DBA 将表重新播种回 0,以便给我们一些时间来检查更新该列。该表也根据时间被清除,所以在我们与任何东西发生碰撞之前,我们有一个很大的 Id 缺口需要用完。由于这是一个高插入表,DBA 提出了页面拆分的可能性,因为我们不再在表的末尾插入。

我的问题是,当标识列的值环绕时,SQL Server 将如何表现?插入间隙会导致性能问题吗?我想考虑创建一个自动循环的序列,而不是将 id 列上升到 bigint。

performance sql-server clustered-index sql-server-2014

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

“由于 'ACTIVE_TRANSACTION',数据库 'tempdb' 的事务日志已满。” 向临时表添加索引后

最近,我在为数据仓库准备数据的过程中添加了一些临时表的索引。在测试数据库上,这些过程的测试运行良好,但在客户端服务器上运行时,由于此错误而失败,需要重新启动服务器。这可能与添加索引有关还是完全不同?

客户端的服务器版本:

  • Microsoft SQL Server 2014 (SP3) (KB4022619) - Windows NT 6.3 上的 12.0.6024.0 (X64) 企业版(64 位)(内部版本 9600:)(管理程序)

测试服务器版本:

  • Microsoft SQL Server 2014 - 12.0.4100.1 (X64) 开发人员版(64 位),在 Windows NT 6.3(内部版本 9600:)(管理程序)上

index sql-server tempdb sql-server-2014 temporary-tables

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

缩小 SQL Server 2008 Standard 数据库以将其移动到 SQL Server 2014 Express

我需要使用 SSMS 缩小流行的 CRM 数据库以将其移动到新服务器上。我将从 SQL Server 2008 Standard 转到 SQL Server 2014 Express。数据库处于简单恢复模式。它需要低于 10 gig 限制。

有 39% 的空间可以擦除,但缩小不起作用。在删除不同表中的 100000 行后,我已经多次执行此操作,包括此数据库,但这次不想缩小。

没有错误只是运行而什么也不做。

sql-server-2008 sql-server shrink sql-server-express sql-server-2014

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

SQL Server 语句在 Oracle 中即时运行时需要永远

请帮我解释这个声明和计划:

https://www.brentozar.com/pastetheplan/?id=Bysy6YtEV

我们从 Oracle 迁移到 SQL Server,我们有一些非常奇怪的行为。它可能与迁移过程中的问题有关。

我发现很难解释执行计划。两种环境都应该具有相同的结构和索引。统计数据应该是最新的。SQL Server 中的设置:

  • 启用创建自动统计
  • 针对 Ad Hoc 查询进行优化 = true
  • 启用快照隔离
  • 最大平行 = 4
  • 阈值 50

DB 大小为 600 Gb,16 核,160 Gb 内存。

在此处输入图片说明

查询:

SELECT
    COUNT ( t_01.rsecondary_objectu ) AS selectExpr
FROM
    PIMANRELATION t_01 ,
    PITEM t_02 ,
    PITEMREVISION t_03
WHERE
    (   (   (   ( t_01.rprimary_objectu = t_02.puid )
            OR  ( t_01.rprimary_objectu = t_03.puid )
            )
       AND
            ( t_01.rrelation_typeu = 'w8INy241VJFL2B' )
        )
   AND  t_01.rsecondary_objectu = '2yLJkWqiVJFL2B'
    )
Run Code Online (Sandbox Code Playgroud)

甲骨文

在此处输入图片说明

我们发现问题是相关的,并且取决于数据。如果我选择一个不同的项目在 GUI 中复制(它实际上是一个复制的东西以及应用程序如何执行这些语句),它会立即工作。查询然后一旦工作正常看起来有点不同:https …

performance sql-server execution-plan sql-server-2014 query-performance

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

为混合 Always on Environment+ 实例创建 Windows 登录/用户,而无需 Always ON

我如何通过更改以下脚本来在启用/未启用 Always ON 的环境中运行。在 Kin 提供了一些非常有用的建议之后,下面似乎正在起作用。但是,当我需要跨 300-400 个 SQL 服务器进行部署时,此代码肯定不会处于最佳状态,而有些总是在其他服务器上没有。

请帮我修改/检查实例是否启用了AG并成功执行

更新根据@Kin 的要求

SET NOCOUNT ON   

 DECLARE @user_to_be_added sysname  
 SET @user_to_be_added = 'Domain\user'  

 DECLARE @sqltext nvarchar(max) = N''  

     if (select serverproperty('IsHadrEnabled')) = 0

  BEGIN

           -- change  to your user to be added .. make sure that the login is already existing

       SELECT  @sqltext += char(10)+ 'use '+quotename(name)+';'+char(10)+ 'CREATE USER '+quotename(@user_to_be_added)+' FOR LOGIN '+quotename(@user_to_be_added)

       FROM sys.databases where state_desc ='ONLINE' AND databaseproperty(name,'isReadOnly') = 0 

       SELECT  @sqltext

 END

    Else

 BEGIN


      SELECT  @sqltext …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups sql-server-2014 sql-server-2016

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

每行带有图像数据库 base64 的表导致死锁/块

我们有一张桌子,

CREATE TABLE [dbo].[MyTable](
    [MasterKey] [uniqueidentifier] NOT NULL,
    [DetailKey] [varchar](100) NULL,
    [JSON] [nvarchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [ix_MyTable_details] ON [dbo].[MyTable]
(
    [MasterKey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

我们有以下查询导致太多死锁/块。

IF EXISTS(SELECT 1 from  [MyTable](nolock) where  [MasterKey]= @MasterKey AND [DetailKey] =  @DetailKey)
BEGIN

 UPDATE [MyTable]
           SET [JSON] = @JSON
    WHERE  [MasterKey]= @MasterKey AND [DetailKey] …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

我可以在正在运行的数据库上移动 SQL Server 备份文件吗?

我们的备份驱动器充满了 TRN 和 BAK 文件。我在服务器上有管理权限,但我没有登录数据库。

我可以将最旧的文件移到其他地方而不导致服务中断吗?哪个?

sql-server backup sql-server-2014

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