我有一个 TVPmyTVP实现为select val.* from vw_MyView val. 前几天,我修改了vw_MyView,将: 替换
select Foo,Bar from DB为
select Foo, Bash, Bar from DB。
这有一个奇怪的副作用:调用select Bar from myTVP()返回一个名为Bar填充了内容的列Bash(尽管事实上Bar和Bash甚至没有相同的类型)。
展示问题的匿名计划:https://www.brentozar.com/pastetheplan/?id=ryJLJmqdl
请注意,Object2和Object1是相同的,但两个计划之间最左侧嵌套循环的输出列表完全不同。
笔记:
我有以下形式的数据需要合并,以便我从两行输入数据创建一行,其中第二列是下一行减去一天的值。
我一直在努力想出一种方法来做到这一点,但没有走得太远。我希望这张图能解释这个问题:
表结构
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 列中的值是连续的,没有缺失值。
我知道,这类问题已经被回答过几次了,但我没有找到一些当前的答案,并且想知道 SQL Server Standard Edition 2016 SP1 是否在这方面做了一些改变,因为它支持企业版之前支持的所有“可编程性功能”仅有的。
我的具体场景如下:我有一个中央备份服务器,它将运行 SQL Server 2017 标准版,并定期恢复从其他 SQL Server 实例获取的新备份。大多数实例也将使用 SQL Server 2017 Standard...但是有一个数据仓库运行 SQL Server 2014 Enterprise Edition。
预先非常感谢您的协助
我正在尝试编写一个 SELECT 查询来计算BatchNumber从 1001 开始每 150 行增加 1 的列。
预期BatchNumber应该是1001前 150 行,然后1002是第 151-300 行,依此类推...
我尝试过在动态上使用除法ROW_NUMBER(),但无法得到它。
SELECT ID
,ROW_NUMBER() OVER (ORDER BY (SELECT ID)) AS RowNumber
,CASE
WHEN CONVERT(INT, (ROW_NUMBER() OVER (ORDER BY (SELECT ID)) % 150))=0
THEN 0 ELSE 1001 END
+ CONVERT(INT,(ROW_NUMBER() OVER (ORDER BY (SELECT ID)) / 150))
AS BatchNumber
FROM Table1 WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud) 我想利用基于 a 的分区[TenantId](稍后与日期范围结合使用)。我不需要在 中手动插入最新值PARTITION FUNCTION,而是考虑创建一个TRIGGER AFTER INSERT来提取[TenantId]值并将ALTER PARTITION FUNCTION其添加到 中SPLIT RANGE。然而,我遇到了一个意想不到的错误:
无法对/使用表“租户”执行 ALTER PARTITION FUNCTION,因为该表是目标表或当前正在执行的触发器的级联操作的一部分。
首先,我创建PARTITION FUNCTION [PF_Tenant_Isolation]和PARTITION SCHEME [PS_Tenant_Isolation]以便在 上进行分区[TenantId]。
CREATE PARTITION FUNCTION [PF_Tenant_Isolation] ([int])
AS RANGE LEFT FOR VALUES (1);
GO
CREATE PARTITION SCHEME [PS_Tenant_Isolation]
AS PARTITION [PF_Tenant_Isolation]
ALL TO ([Auth]);
GO
Run Code Online (Sandbox Code Playgroud)
接下来,我将[Tenant]根据新创建的分区方案创建表。
IF OBJECT_ID('[Auth].[Tenant]', 'U') IS NULL
BEGIN
CREATE TABLE [Auth].[Tenant] (
[TenantId] [int] IDENTITY(1,1)
,[TenantActive] [bit] …Run Code Online (Sandbox Code Playgroud) 如何拥有一个允许消费者有选择地指定返回行数的存储过程?
如果未指定行数,则返回所有行。
我遇到过 SQL Server 的奇怪状态。在一个特定的数据库中,此 SQL Serverselect OBJECT_ID(N'X')需要“永远”。如何诊断发生了什么?
编辑:问题消失了。不过,我还是很好奇到底发生了什么。
我正在寻找查询通知,以便在多个客户端上收到特定表更改的通知。看来这个功能在SQL Server 2008 R2中已经被删除了。文档对此不是很清楚。
到底什么时候删除了这个(具体是哪个版本)?
有没有其他方法可以在不使用额外组件的情况下进行管理?
创建非聚集索引时,叶级将包含对原始表中行的引用:
我的问题是为什么非聚集索引没有设计为在这两种情况下包含物理地址(除了聚集索引键之外)。当定义聚集索引时,它可以保存 B-Tree 的读取以用于键查找。