MS SQL:通过包含新表中的附加列来更改索引视图

2024-01-02

我需要通过包含新创建的表中的附加列值来更新现有的 MS SQL 索引视图。 索引视图:

CREATE OR ALTER VIEW [dbo].[MySelectionInfo]
  WITH schemabinding
  AS
    SELECT C.Id                                         id0,
           C.Code                                       Code1,
           C.Name                                       Name2,
           C.ProgramLevel                               Level3,
           C.Department                                 Department4,
           C.City                                       City10,
           C.STATE                                      State11,
           C.StartDate                                  StartDate12,
           C.Deadline                                   Deadline13,
           B.ID                                         Table_B_ID,
           A.Id                                        Table_A_ID

    FROM dbo.Table_A A
           INNER JOIN dbo.Table_B B ON A.id = B.Table_A_Id
           INNER JOIN dbo.Table_C C ON C.Table_B_Id = B.Id

新表:

CREATE TABLE [dbo].[Table_D] (
  [Id]               [int] IDENTITY (1, 1) PRIMARY KEY NOT NULL,
  [ModelName] [varchar](max)                    NOT NULL,
  [Table_C_Id]        [int]                             NOT NULL,
  [AttributeValue]   [varchar](max)                    NOT NULL,
  [CreatedDate]      [datetime]                        NOT NULL,
  [UpdatedDate]      [datetime]                        NOT NULL,
  CONSTRAINT FK_Table_C_Id FOREIGN KEY (Table_C_Id) REFERENCES some_schema.dbo.[Table_C] (Id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)

Data in the new table: enter image description here

我只想包含一些 ModelName 列值作为列名称,并将 AttributeValue 作为值包含在select * from [dbo].[MySelectionInfo]结果集:

我可以使用以下方法达到预期的结果PIVOT功能:

CREATE OR ALTER VIEW [dbo].[MySelectionInfo]
  WITH schemabinding
  AS
    SELECT C.Id                                         id0,
           C.Code                                       Code1,
           C.Name                                       Name2,
           C.StartDate                                  StartDate12,
           C.Deadline                                   Deadline13,
           B.ID                                         Table_B_ID,
           A.Id                                        Table_A_ID
    FROM dbo.Table_A A
           INNER JOIN dbo.Table_B B ON A.id = B.Table_A_Id
           INNER JOIN dbo.Table_C C ON C.Table_B_Id = B.Id
           LEFT JOIN (SELECT PivotTable.Table_C_Id,
                             PivotTable.attribute1,
                             PivotTable.attribute2,
                             PivotTable.attribute3
                      FROM (SELECT Table_D.Table_C_Id,
                                   Table_D.ModelName,
                                   Table_D.AttributeValue
                            FROM dbo.Table_C
                                   INNER JOIN dbo.Table_D
                                     ON Table_C.Id = Table_D.Table_C_Id) AS sourceTable
                               PIVOT (
                                 Max(AttributeValue) FOR ModelName IN (attribute1, attribute2, attribute3)
                               ) AS PivotTable) dbo.Table_D D ON D.Table_C_Id = C.Id

But,运行上面的SQL语句后,我无法为视图创建聚集索引,因为LEFT JOIN, PIVOT, MAX禁止用于索引视图 https://learn.microsoft.com/en-us/sql/relational-databases/views/create-indexed-views?view=sql-server-ver15.

问题:是否有任何其他解决方案可以实现所需的结果,并且仍然将现有视图作为索引视图?


if your 数据允许,您可以使用 case 语句进行交叉制表,而不是进行 PIVOTing:

/*
drop view dbo.mytestinfoview;
go
drop table dbo.Table1;
go
--*/

create table dbo.Table1
(
    id int,
    ModelName varchar(20),
    AttributeValue int
);


insert into dbo.Table1(id, ModelName, AttributeValue)
select distinct o.object_id, concat('attribute', v.id), o.attributevalue
from 
(
    select 
        object_id , 
        abs(checksum(newid())) % 2 as attributevalue
    from sys.objects
) as o
cross apply (values(1), (2), (3), (4)) as v(id)
go

create or alter view dbo.mytestinfoview
with schemabinding
as
    select id, count_big(*) as thecounter,
        sum(isnull(case ModelName when 'attribute1' then AttributeValue end, 0)) as attribute1,
        sum(isnull(case ModelName when 'attribute2' then AttributeValue else 0 end, 0)) as attribute2,
        sum(isnull(case ModelName when 'attribute3' then AttributeValue else 0 end, 0)) as attribute3
    from dbo.Table1
    group by id
go

create unique clustered index idx_v1 on dbo.mytestinfoview(id);
go

select * from dbo.mytestinfoview;
go
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MS SQL:通过包含新表中的附加列来更改索引视图 的相关文章

  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK
  • 使用 FTS 进行搜索相对于在索引列上使用 LIKE 进行搜索的性能有何提升)?

    质疑 全文搜索sql server 2005 https stackoverflow com questions 3627583 full text search sql server 2005 3824263 3824263 与在索引列上
  • T-SQL 插入或更新

    我有一个关于 SQL Server 性能的问题 假设我有一张桌子persons包含以下列 id name surname 现在 我想在此表中插入一个新行 规则如下 If id表中不存在 则插入该行 If id存在 然后更新 我这里有两个解决
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 如何在 Elixir 的 Ecto 查询中使用“case-when”?

    我有一个 SQL 查询 例如 SELECT SUM CASE WHEN
  • 我可以采取哪些措施来提高 SQL Server 中纯用户定义函数的性能?

    我制作了一个简单但计算相对复杂的 UDF 用于查询很少更改的表 在典型用法中 该函数会在一个非常小的参数域上从 WHERE 子句中多次调用 如何才能更快地使用 UDF 我的想法是应该有某种方式告诉 SQL Server 我的函数使用相同的参
  • 如何选择前一行值? [复制]

    这个问题在这里已经有答案了 如何从 SELECT 语句的上一个结果行获取值 例如 如果我们有一个名为 cardevent 的表 并且有行 ID int Value Money 并且其中有一些行 ID Value 1 70 1 90 2 10
  • N 前缀和参数

    我有一些存储过程 CREATE PROC MyProc FullName NVARCHAR 200 NULL AS 当我将此过程称为exec MyProc Some english text 效果很好 但如果称其为exec MyProc 那
  • SELECT * FROM 员工 WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

    最近开始学习oracle和sql 在学习的过程中 我遇到了我的朋友在面试时被问到的几个问题 SELECT FROM Employees WHERE NULL IS NULL 此查询生成Employees 表中的所有行 至于我所理解的Orac
  • 查看与存储过程连接的结果

    我在 SQL Server 中有一个由应用程序使用的现有视图 我需要加入从存储过程返回的表 存储过程会执行很多操作 例如在返回结果之前插入多个 temp 表 我尝试将存储过程转换为表值函数 但是插入 TVF 内的临时表会导致编译错误 我还有
  • 无法找到请求的.Net Framework 数据提供程序。 (Sql客户端)

    我正在尝试使用来自 SQL Server 2005 的 DB First 迁移来设置一个简单的 ASP NET MVC 4 Web 应用程序 我已经在数据库中创建了表 并使用实体框架在代码中创建了对象 我可以使用这些对象访问数据 当我尝试使
  • 如何延长SQL查询的超时时间

    这不是连接超时 因为与数据库的连接正常 问题是我调用的存储过程花费的时间超过 30 秒 并导致超时 该函数的代码如下所示 SqlDatabase db new SqlDatabase connectionManager SqlConnect
  • Oracle SQL 列转行(无需 UNPIVOT)

    我目前拥有的 Team User Apples Oranges Pears Red Adam 4 5 6 Red Avril 11 12 13 Blue David 21 22 23 需要什么 Team User Product Count
  • 如何在oracle日志中打印http请求

    我们正在使用以下方式调用外部 URLUTL HTTP方法并设置 HTTP 标头 例如basic authentication keep alive content soap action所以我需要打印我设置为标题的内容 DBMS OUTPU
  • 无法在Phalcon php中调用除indexAction之外的indexController的操作

    我的 xampp htdocs 目录中有一个名为 phalcon 的简单项目 并且我将 apache 配置为指向该文件夹 以便我可以在浏览器中转到 phalcon 当我尝试打开索引 默认 以外的索引控制器视图时 会出现问题 例如 我在索引控
  • 如何增加每次 INSERT INTO 迭代的值?

    我有一个查询 如下所示 第 1 列位于 另一列是 varchar 100 INSERT INTO TABLE1 column1 column2 SELECT MAX column1 FROM TABLE1 1 anotherColumn F
  • 如何设置 ssrs 报告上日期和时间的格式?

    在 SSRS 报告中我需要显示todays date and current time 我试过这个 FormatDateTime Now MM dd yyyy hh mm tt 但这对我来说不起作用 给出了错误 任何人请帮助我express
  • 在 Sql Server 2005 中实现最后修改列的最佳方法?

    如何在 SQL 中实现最后修改列 我知道对于创建日期的列 您可以将默认值设置为getdate 对于最后修改我一直使用触发器 但似乎必须有更好的方法 Thanks 触发器是最好的方法 因为此逻辑与表密切相关 而不是与应用程序相关 除了更细粒度
  • 将从数据透视表包生成的数据透视表转换为数据帧

    我正在尝试制作一个数据透视表pivottabler包裹 我想将数据透视表对象转换为数据框 以便我可以将其转换为数据表 带有 DT 并在 Shiny 应用程序中渲染它 以便可以下载 library pivottabler pt qpvt mt

随机推荐

  • 从自定义信息窗口打开 URL,Android Google 地图 V2

    我正在使用 android google 地图 api v2 上面显示了许多标记 每次单击标记时 都会打开带有特定标题 片段的自定义信息窗口 问题是我无法点击 URL www news com 请在下面找到我的标记的选项 如何指定 www
  • 将值添加到 R 中表的条形图中

    我正在尝试用条形图绘制表格并向其添加值 tt structure c 7L 13L 24L 30L 30L 38L 35L 45L 37L 43L 38L 59L 33L 45L 37L 58L Dim c 2L 8L Dimnames s
  • bootstrap 4 中的 popper.js 给出 SyntaxError 意外的令牌导出

    我尝试安装 bootstrap 4 并包含以下链接 但出现以下错误 未捕获的语法错误 意外的令牌导出 有什么想法如何修复它吗 我也刚得到这个 并弄清楚为什么会发生这种情况 如果其他人经过这里 检查 readme md 用法
  • 使用 SharpSSH 从 SFTP 获取文件大小

    我正在使用 SharpSSH 将 zip 文件从本地目录上传到 SFTP 一切正常 但是 我想获取我刚刚上传的当前文件的文件大小 我这样做的原因是 zip 文件很大 从 45 GB 到 80 GB 我想确保在上传过程中它不会失败或卡住 想要
  • 如何获取云函数onCreate触发文档id

    我想获取触发 oncreate 函数的文档的 id 但我尝试过snap params id像下面一样 但我变得不确定 当我控制台记录这个projectId 我变得未定义 有时会引发错误 我正在使用版本 firebase admin 5 12
  • 事件真的能让代码解耦吗?

    所以我尝试使用事件来解耦我拥有的代码 这是我的问题 class WorldHandler public void Notify object sender EventArgs e if e is CameraMovedEventArgs h
  • node-fetch 3.0.0 和 jest 给出 SyntaxError: Cannot use import statements Outside a module

    我正在尝试升级我的 api 以使用 node fetch 3 0 0 他们的文档中的部分重大更改是 node fetch 现在是一个纯粹的 ESM 模块 https github com node fetch node fetch blob
  • Matplotlib:获取轮廓颜色标签以对数刻度和多个级别显示

    我在创建填充轮廓图时遇到问题 该轮廓图既具有对数颜色缩放 又具有比默认选择的颜色更多的颜色 我基本上是想遵循这个例子 https matplotlib org examples images contours and fields cont
  • 是否有类似 String#scan 的函数,但返回 MatchDatas 数组?

    我需要一个函数来返回字符串中正则表达式的所有匹配项and找到匹配项的位置 我想突出显示字符串中的匹配项 String match 返回 MatchData 但仅适用于第一个匹配项 有没有比类似的方法更好的方法 matches begin m
  • 使用 NSBezierPath 的 NSView 上的圆角绘制得很糟糕

    在我的 ViewController 的主 NSView 中 我重写了func drawRect dirtyRect NSRect 使用在我的主视图上实现圆角的方法NSBezierPath 用同样的方法 我还指定主视图的渐变背景 overr
  • Python 只读取文本文件的最后一行

    我正在尝试从文本文件中读取 2 个 IP 地址并连接这些设备并在这些设备上运行 conf t 命令 当我尝试通过以下编码来完成这项工作时 python 仅读取文本文件中的最后一行 而不读取第一行 我应该怎么办 谢谢 import param
  • 使用字符串值创建新实例

    我有几个课程 SomeClass1 SomeClass2 如何使用字符串中的类名创建这些类之一的新实例 通常 我会这样做 var someClass1 new SomeClass1 如何从以下内容创建此实例 var className So
  • 对象引用与函数调用相同

    UserDetail functionCheck NSString str UserDetail d2 UserDetail alloc init NSLog check address gt p d2 d2 auth token str
  • R引导错误中的Phylo相关图?

    我正在尝试根据我的数据创建一个系统相关图phyloCorrelogram来自phylosignal包以测试系统发育信号的存在 我的数据在所谓的phylo4d格式并被称为tree 现在 当我跑步时phyloCorrelogram tree 我
  • 可以将 firestore 查询表示为字符串

    可以表示一个CollectionReference作为具有 getter 属性的字符串path 这对于单元测试来说非常方便 例如admin firestore collection cities doc LA path回报 cities L
  • Android/Python 如何使用RSA和PKCS1 Padding验证签名SHA256

    我是新会员 我等了两天才找到解决方案验证从android客户端到python服务器的签名 首先 我创建密钥对并从私钥生成签名 谢谢 pedrofb 我已经更新了完整的代码 验证在 python 服务器中完成 protected void o
  • 无法解析的标识符 - SKErrorPaymentCancelled [重复]

    这个问题在这里已经有答案了 昨天 随着 iOS 9 3 和 OSX 10 11 4 包括 Swift 2 2 的发布 我更新到了最新版本的 Xcode 7 3 当我构建我的应用程序时 我收到一条错误消息Use of unresolved i
  • 如何创建一个采用默认值的 CMake 变量,除非显式覆盖?

    我有一个使用 CMake 构建的 C 项目 我希望 CMakeLists txt 中的构建配置能够构建在Release默认模式 并内置Debug仅当明确指定时才模式 参考this https cmake org cmake help v3
  • Objective C - 如何编写宏

    我需要编写一个多行宏 我需要这个 因为我必须有部分代码已 粘贴 到我的代码中的特定点 我怎样才能做到这一点 从你的问题中并不清楚你真正想要什么 但是一个简单的多行宏定义如下 define FOO something something el
  • MS SQL:通过包含新表中的附加列来更改索引视图

    我需要通过包含新创建的表中的附加列值来更新现有的 MS SQL 索引视图 索引视图 CREATE OR ALTER VIEW dbo MySelectionInfo WITH schemabinding AS SELECT C Id id0