我有以下形式的数据需要合并,以便我从两行输入数据创建一行,其中第二列是下一行减去一天的值。
我一直在努力想出一种方法来做到这一点,但没有走得太远。我希望这张图能解释这个问题:
表结构
CREATE TABLE Process(
ProcessOrder int NOT NULL IDENTITY (1, 1),
ProcessDate date NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
询问
SELECT ProcessOrder, ProcessDate From Process ORDER BY ProcessOrder;
Run Code Online (Sandbox Code Playgroud)
数据
ProcessOrder ProcessDate
------------ -----------
208 2016-01-04
209 2016-01-11
210 2016-01-18
211 2016-01-25
212 2016-02-01
213 2016-02-08
Run Code Online (Sandbox Code Playgroud)
我需要将上述数据变成以下形状(注意,从后续记录来看,ProcessEnd 比 ProcessBegin 少一天):
ProcessOrder ProcessBegin ProcessEnd
------------ ------------ ----------
208 2016-01-04 2016-01-10
209 2016-01-11 2016-01-17
210 2016-01-18 2016-01-24
211 2016-01-25 2016-01-31
212 2016-02-01 2016-02-07
213 2016-02-08 *NULL*
Run Code Online (Sandbox Code Playgroud)
编辑
我保证 ProcessOrder 列中的值是连续的,没有缺失值。
我编写了代码将记录更新到数据库。数据库是Azure DB,S4层。
更新和插入有时是高度并发的,因为它来自执行太多更新的应用程序。
该代码在大多数情况下都能成功运行,但有时会抛出 2627 异常(在 CATCH 语句内部处理)。到目前为止还无法弄清楚可能是什么问题。
我可以用 MERGE 语句替换它,但是我不太喜欢它,并且还想弄清楚这个 try and catch 发生了什么。
SET nocount ON;
IF NOT EXISTS(SELECT * FROM MyTable WHERE ID = @ID)
BEGIN TRY
INSERT INTO Table(ID, Value, TimeChanged) VALUES (@id, 'xxx', GETDATE())
END TRY
BEGIN CATCH
IF @@Error <> 2627 ----Violation of PRIMARY KEY constraint
THROW;
END CATCH
UPDATE MyTable SET Value = 'xxx' WHERE ID = @ID AND TimeChanged < GETDATE()
Run Code Online (Sandbox Code Playgroud) 我正在开发 SQL Server 实例并使用 Redgate SQL Monitor。我在前 10 个列表中看到一个执行了 1 次的查询,该查询的逻辑读取量比实例的内存多出约 100 倍,而且查询的持续时间只有几分钟。这怎么可能?我的意思是8KB页面乘以逻辑读取次数怎么会比内存多呢?我不明白是什么?
谢谢
在哪里可以找到列表来确保我正在使用的函数在旧版本的 Microsoft SQL Server 中可用?
我们最近遇到了有人使用 CONCAT 的问题,它无法在我们的一些旧服务器上运行。
我在这里似乎有类似的问题,但似乎没有一个答案符合我正在寻找的-
假设我有一张这样的桌子:
| 分配给 | 部门ID | 类型 |
|---|---|---|
| 玛丽 | 5001 | 初级 |
| 鲍勃 | 5002 | 中间 |
| 鲍勃 | 5003 | 初级 |
| 吉尔 | 5004 | 高的 |
| 鲍勃 | 5005 | 高的 |
| 鲍勃 | 5006 | 高的 |
另一个像这样:
| 用户 | 电话 | 地址 |
|---|---|---|
| 玛丽 | 111-222-3333 | 南巷111号 |
| 鲍勃 | 222-111-3333 | 北大道222号 |
| 吉尔 | 333-222-1111 | 555公路 |
我想在第一个表上输出带有左连接的第二个表,其中包含每个指定用户的“类型”总数(基本、中、高),因此它需要类似的内容:
| 用户 | 电话 | 小学总计 | 总中 | 总高 |
|---|---|---|---|---|
| 玛丽 | 111-222-3333 | 1 | 0 | 0 |
| 鲍勃 | 222-111-3333 | 1 | 1 | 2 |
| 吉尔 | 333-222-1111 | 0 | 0 | 1 |
我已经尝试过--Count(case when <table>.[type] = 'Elementary' then 1 else 0 end) AS ElementaryCount,,但这只是让我获得整个表,而不是左连接的用户。
有人知道我该怎么做吗?
我需要编写一个存储过程来更新数据库中的链接引用。链接可以包含在几个包含 JSON 的 nvarchar 字段中(可能包含一些 url)。
为此,我每次迭代分批更新表 8129 个项目,这样机器就不会挂起(理论上)。
但现在代码似乎无论如何都挂起,它不会打印任何消息,并且程序继续运行(不影响任何数据)很多分钟,直到我必须终止该程序(同时似乎没有影响任何数据) 。
如果我尝试在玩具示例上使用相同的逻辑,我不会遇到任何问题,所以我认为我的问题是由于表很大(几十万行)这一事实造成的。
这里是一个正在运行的最小示例,更大的表上完全相同的代码显然没有执行任何操作(使用 SQL Server 2019 进行测试)。
程序代码:
ALTER PROCEDURE [dbo].[SiteUrlChangeURL]
@FullOldUrl nvarchar(500),
@FullNewUrl nvarchar(500)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET @FullOldUrl = ISNULL(@FullOldUrl,'');
SET @FullNewUrl = ISNULL(@FullNewUrl,'');
IF ( LEN(@FullOldUrl) <= 0 OR LEN(@FullNewUrl) <= 0 )
BEGIN
PRINT('Invalid parameters');
RETURN 1;
END
--ARTICLE
RAISERROR ('updating articles',0,1) WITH NOWAIT;
WHILE 1=1
BEGIN
UPDATE …Run Code Online (Sandbox Code Playgroud) 请考虑以下错误消息。
消息 207 级别 16 状态 1 第 7 行
列名“FOO”无效。
由于我触发它的方式,我碰巧知道这是一个解析/编译时错误。
假设我正在运行一个不属于过程的长脚本,并且我收到了相同的错误消息。此错误消息中的内容告诉我错误是在解析/编译时而不是运行时发生的?
CREATE TABLE Department_History
(
DepartmentNumber INT
);
GO
ALTER TABLE Department_History ADD FOO INT;
-- This is fine and shows FOO.
SELECT * FROM Department_History;
-- When uncommented, this fails at parse time.
INSERT Department_History (DepartmentNumber, FOO) VALUES (4, 5), (6, 7), (8, 9);
Run Code Online (Sandbox Code Playgroud) 我想选择过去 15 分钟内的数据,例如:
在 12.02 我想要从 11:45 到 12:00 的行
在 12.09 我仍然想要从 11:45 到 12:00 的行
在 12.18 我想要从 12:00 到 12:15 的行
数据以datetime2格式存储,我使用的是2019标准版。感谢任何帮助让我开始。规范稍后可能会更改(例如,10 分钟而不是 15 分钟),但我希望能够自己解决这个问题。
谢谢
我是业余爱好者。
我正在尝试以下
select * from [dbo].[AccessFeeDetail]
where LastLoginDate >= '10/15/2012 00:00:00.000', jobname not like 'Uptest_%'
Run Code Online (Sandbox Code Playgroud)
我在 where 子句上犯了一个错误。你能纠正我吗
“LastLoginDate”和“JobName”是同一个表中的字段。
谢谢!
输入:我有一个包含(任意数量)用户提供的字符串的表:
?????????
? Value ?
?????????
? To ?
? An ?
?????????
Run Code Online (Sandbox Code Playgroud)
以及用户详细信息表:
?????????????????????
? UserID ? UserName ?
?????????????????????
? 12 ? Tom ?
? 132 ? Ann ?
? 32 ? Dina ?
? 2 ? Mark ?
?????????????????????
Run Code Online (Sandbox Code Playgroud)
我需要一个查询来返回用户表中的所有记录,其中UserName是Value输入表中任何记录的部分字符串匹配。这种情况下的预期输出是:
?????????????????????
? UserID ? UserName ?
?????????????????????
? 12 ? Tom ?
? 132 ? Ann ?
?????????????????????
Run Code Online (Sandbox Code Playgroud)