标签: sql-server

从具有连续日期和相同列值的行中查找日期范围

之前有人问过一个类似的问题,但我一直无法将这些答案调整到我的问题中。

我想在连续日期中查找行,其中另一列具有相同的值,并将其作为单个日期范围返回。

我尝试使用OVERPARTITION BY以及 ROW_NUMBER() 来获得我需要的结果,但我对这些概念不够熟悉,无法找出正确的输出。

系统为 Microsoft SQL Server 2014。

鉴于:

CREATE TABLE EXCEPTIONS
(
  ID    NUMERIC(18) NOT NULL,
  DATE  DATE        NOT NULL,
  TYPE  VARCHAR(20) NOT NULL,
  VALUE VARCHAR(20),
);
Run Code Online (Sandbox Code Playgroud)

和数据:

INSERT INTO EXCEPTIONS VALUES 
(17482, '2016-08-24', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-08-25', 'PRESSURE_EXCEPTION', 'Over'), 
(17482, '2016-08-26', 'PRESSURE_EXCEPTION', 'Over'), 
(17482, '2016-09-04', 'PRESSURE_EXCEPTION', 'Over'), 
(17482, '2016-09-05', 'PRESSURE_EXCEPTION', 'Over'), 
(17482, '2016-09-16', 'PRESSURE_EXCEPTION', 'Under'), 
(17482, '2016-09-17', 'PRESSURE_EXCEPTION', 'Under'), 
(17482, '2016-09-23', 'PRESSURE_EXCEPTION', 'Under'), 
(17482, '2016-09-24', 'PRESSURE_EXCEPTION', 'Under'), 
(17482, '2016-09-25', 'PRESSURE_EXCEPTION', 'Under'), …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning date

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

复杂查询中的执行顺序

我知道简单查询的查询执行顺序。

但是,我对理解此查询中的确切执行顺序感到困惑:

select 
      M.DateKey  As DateKey ,
      PersonnelCode As PersonnelCode,
      Isnull((select top 1 BranchCode 
                  from [Financial].[viwPersonnelLocation]
              where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey 
                  order by DateKey desc)
                  ,p.BranchCode) As BranchCode,

          Isnull((select top 1 CertficateCode
                   from [Financial].[viwPersonnelEducation]
                   where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey 
                   order by DateKey desc)
                   ,p.Educationcode) As Educationcode

    from (select DateKey,MonthOfYearKey,EDATE 
          from [Common].[DimTime] 
          where LastDayOfMonthKey = 1) M

                Inner Join 

               [Financial].[viwPersonnelInfo] As P  
                   on m.DateKey >= p.DateOfEmployeement
    where (m.DateKey <= p.DateOfLeave) or (p.DateOfLeave='' or p.DateOfLeave is …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

发生 Always On 故障转移时如何使用“tempdb”?

tempdb发生故障转移时如何利用?

假设有两台服务器,服务器 1是主服务器服务器 2是辅助服务器。突然,故障转移发生了,那么,tempdb在这种情况下如何表现?

sql-server sql-server-2012 failover availability-groups sql-server-2014

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

多线程/并行插入和哈希分区中的 SQL Server 锁存

我们正在 SQL 服务器表中进行并行、多线程插入,并希望减少闩锁。

利用散列分区来减少闩锁的缺点是什么?从本质上查询所有这些拆分的分区表是否降低了查询速度?

我们有大约 120 表插入每秒,金融系统。

其他注意事项:SQL 2016 系统每年将使用大约 50 GB 的 SSD 硬盘空间。目前,拥有 50 个核心处理器和 150 GB 的 RAM。

平台未搭建,所以没有基线测试;但我需要制定测试计划和策略。

哈希分区示例: http : //www.madeiradata.com/how-to-solve-the-tail-insert-problem-2/

CREATE PARTITION FUNCTION pf_hash (TINYINT) 
AS RANGE LEFT FOR VALUES (0,1,2,3,4,5,6,7,8);

CREATE PARTITION SCHEME ps_hash 
AS PARTITION pf_hash ALL TO ([PRIMARY]);

CREATE TABLE dbo.UserEntries_RegularWithHash 
(   
Id BIGINT IDENTITY NOT NULL,
UserId INT NOT NULL ,
CreatedDate DATETIME2 NOT NULL,
HashId AS CAST(Id % 9 AS TINYINT) PERSISTED NOT NULL,
CONSTRAINT PK_UserEntries_RegularWithHash 
PRIMARY KEY CLUSTERED …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server concurrency partitioning hashing

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

在 WHERE 子句中使用日期时间列的 DATE 部分

我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。

我当前的查询如下所示:

SELECT * FROM tbl_item_trans
WHERE  (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。

我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime

@start@end变量使用date的数据类型,例如“2017年9月16日”。

sql-server date where

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

如何在sql server中的所有现有作业中添加一个步骤

IF (SELECT ars.role_desc
    FROM sys.dm_hadr_availability_replica_states ars
    INNER JOIN sys.availability_groups ag
    ON ars.group_id = ag.group_id
    AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
   --We're on the secondary node, throw an error
   THROW 50001, 'Unable to execute job on secondary node',1
END
Run Code Online (Sandbox Code Playgroud)

设置此步骤以在成功时继续下一步,并在失败时退出报告成功的作业。

你能解释一下如何在所有现有的 SQL 服务器作业中添加这个步骤吗?

sql-server sql-server-2012 jobs

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

将数据库(在 SQL Server 2012 中创建)附加到 SQL Server 2014 实例而不升级它

我在生产服务器(SQL Server 2012)中有一个数据库,我有一个开发服务器(SQL Server 2014)。

我需要在开发服务器中附加数据库,但我意识到一旦附加它就会自动升级到 2014 版,因此我无法在生产服务器中再次附加它。

是否可以在不升级的情况下将数据库附加到开发服务器中?

我们计划在开发、分离和将其附加到生产中进行更改。

sql-server attach

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

优化查询。FOR XML PATH 或一些替代方案?

有什么办法可以优化FOR XML PATH语句吗?或者也许我应该使用另一种方法?

目前的方法根本不可接受。这需要几分钟。我知道视图是一个非常大的联盟,需要时间来消耗它,但也许是另一种方式......

这是查询:

SELECT t.serialNumber as TVM
  ,[issuanceDate] as transactionDate
  ,ioy.tvmTransactionId as TVM_TRANS_ID
  ,STUFF((SELECT ', ' + stv.carrierSN
    FROM HERMES.wts.v_SaleTransactionView as stv
    WHERE stv.tvmTransactionId = ioy.tvmTransactionId
    and stv.serialNumber = 'M040'
    FOR XML PATH ('')), 1, 2, '') as [serial_numbers]
  FROM [hermes].[wts].[IOYLog] ioy
  left join Hermes.hermes.Terminals t on ioy.tp_terminalId = t.tp_terminalId
  left join hermes.hermes.POS p on t.tp_POSId = p.tp_POSId
  left join [Hermes].[wts].[IOUPaymentStatus] [is] on [is].[tp_paymentStatusId] = ioy.status
  WHERE [is].includeInReports = 1 
  and (issuanceDate BETWEEN '2017/09/01' AND '2017/09/08') …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan concat query-performance

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

Nvarchar 列被截断为 256 个字符

I have a SQL Server Express 2012 database. There is a table which previously had a column of type nvarchar(255). Now my requirements have changed and I am required to store long strings in the same column, so I modified the columns to have size 512.

alter Table [dbo].[mytable] ALTER COLUMN [mycol] nvarchar(512) NULL;
Run Code Online (Sandbox Code Playgroud)

Now when I try updating data in the column whose size was increased, the update goes through fine. But when I query the data, the …

sql-server alter-table

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

扩展事件不会捕获每个 rpc_completed

我有一个长时间运行的扩展事件会话,它捕获rpc_completed为几个过程过滤的事件。它发现了一些已经运行的。但其他人当我知道他们已被处决时,它并没有捕捉到他们。我知道这一点的原因是因为我查看了缓存并发现它们在那里被调用。

我正在使用 SQL Server 2016。我将过滤object_name作为字段名称、equal_i_sql_unicode_string运算符和值减去架构名称。我还修改了会话以添加我知道经常使用的 proc,它可以很好地捕获那些。

为什么它会忽略而不捕获一些?

sql-server stored-procedures extended-events

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