问题标签 [schemabinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
498 浏览

tsql - 当其他视图依赖于它时如何使用 SCHEMABINDING 更改视图

我们有创建的视图SCHEMABINDING,它们用于其他也有的视图SCHEMABINDING

我想更改基本视图以包含表中新添加的列,但不允许更改它说其他视图依赖于该视图。

我们可以在没有模式绑定的情况下更改视图,然后在更改后再次更改它以应用模式绑定吗?

它是这样工作的吗?

0 投票
1 回答
340 浏览

sql-server - 如何在对引用表进行更新或删除操作之前禁用使用 Schemabinding 创建的视图

我有一个使用“WITH SCHEMABINDING”创建的视图,它有一个唯一的聚集索引,三个不同的非聚集索引。问题是在创建此视图之前,更新或删除操作(影响超过 1000 行)需要不到 2 秒,但是在我创建视图后,删除或更新操作大约需要 930 秒。

我对此进行了搜索,当我在不使用“WITH SCHEMABINDING”参数的情况下更改视图并解决了问题时,删除或更新操作大约需要 1 或 2 秒。但是我需要使用“WITH SCHEMABINDING”来创建索引。

我不想在每次删除或更新操作之前更改视图。有没有办法可以禁用此视图或此问题的实际解决方案是什么?

0 投票
1 回答
180 浏览

sql - 使用 SCHEMABINDING 在 MS Access 中读/写 SQL Server 视图

我不得不将一个 MS Access 2003/2010 ADP 项目(该项目使用 SQL Server 视图作为其RecordSource所有形式)重新开发为一个 MS Access 2016 ACCDB。

我尝试使用传递查询来获取数据,这对于只读列很好,但是当我想更改其中一个绑定列中的值时,它会说 ,RecordSet is not updateable如果使用视图,这是您可能期望的。

但我现在已经读到,如果你SCHEMABINDING这样定义视图:

并添加UNIQUE CLUSTERED INDEX这样的:

然后TableDef像这样将视图作为无 DSN 的方式添加到您的项目中

它变得像表格一样可编辑。

但是,当我TableDef在 Access 中打开它时,它会显示所有行和列,就好像它是可编辑的一样,但是如果我尝试编辑一个列,它会说有Write Conflict另一个用户的更改,当我 100% 确定没有不是因为我是唯一使用它的人。

有任何想法吗?(我目前正在使用 Access 2010)

0 投票
0 回答
39 浏览

sql - 如何应用自由文本搜索来查看子查询

我正在尝试在视图上进行自由文本搜索

我正在尝试为此视图创建索引

我收到一条错误消息

无法在视图“dcawards.dbo.ProductView”上创建索引,因为它包含一个或多个子查询。考虑将视图更改为仅使用联接而不是子查询。或者,考虑不索引此视图。

我的自由文本查询是

请提出解决方案

0 投票
1 回答
35 浏览

sql - 无法在架构绑定对象或约束表达式中指定 sql CLR 类型 - SQL - WITH SCHEMABINDING

我有一个 UDF 函数,我发现了一些获得更好性能的技巧:

https://www.mssqltips.com/sqlservertip/5864/four-ways-to-improve-scalar-function-performance-in-sql-server/

我都试过了,但我无法让“WITH SCHEMABINDING”工作。错误:“无法在架构绑定对象或约束表达式中指定 sql CLR 类型”

这是为什么?

我的代码

0 投票
0 回答
37 浏览

sql-server - 在 WITH SCHEMABINDING 视图中使用别名会导致错误

我有这样的看法:

我得到这个错误:

我需要在视图上创建一个索引并使用“WITH SCHEMABINDING”,但我在其中一个 SELECT 的别名中出现错误

0 投票
1 回答
54 浏览

sql-server - SQL Server:索引视图错误地验证基表中的插入

我相信 SQL Server 索引视图正在错误地验证基表中的插入。

为了模拟,考虑以下

创建表:

填充表

检查是否一切正常

创建模式绑定视图

检查是否一切正常

清桌子

通过创建聚集索引来实现视图:

现在尝试添加与以前相同的数据

结果:INSERT不起作用。聚集索引的创建阻止了我INSERT的这个错误:

消息 8115,级别 16,状态 6,第 105
行将 nvarchar 转换为数字数据类型的算术溢出错误。该语句已终止。

这里发生了什么?

看起来应用于索引视图 ege[module_id] = 'Balances' AND e.[event_id] = 'Transfer' 的 where 子句未应用。

因此,所有插入基表的数据都会根据视图 [iv_test] 检查,而在我看来,只有满足视图 [iv_test] 中指定的 WHERE 条件的插入数据才应根据视图中的格式进行检查 [ iv_test]。

有趣的是:以下方法确实有效:

  • 首先插入 ID 为 1 & 2 的记录;
  • 然后创建聚集索引;
  • 然后插入ID为3的记录;

这当然不能解决我的问题,但很明显,在创建聚集索引后,索引视图有一些 WITH NOCHECK 约束处于活动状态。

欢迎任何想法

0 投票
1 回答
59 浏览

sql-server - 使用具有别名类型的架构绑定 SQL Server 用户定义函数?

考虑以下 T-SQL 语句:

当我使用 SQL Server 2017 (v14.xx) 尝试此操作时,我收到此错误:

消息 2792,级别 16,状态 1,过程 f,第 6 行(批处理开始第 2 行)
无法在架构绑定对象或约束表达式中指定 SQL CLR 类型。

的文档create type说明它

创建别名数据类型或用户定义类型 [in a database]。[...] 用户定义类型是通过 [CLR] 中的程序集类实现的。

这种听起来像是“用户定义的类型”和“CLR 类型”(如错误消息中所命名)可能只是同一事物的两个名称,但“别名数据类型”是(或可以是)别的东西。

我不想要任何 CLR 支持,我想做的只是给类型一个名称,以便它可以在多个函数定义和调用这些函数的任何代码中一致地使用。我想要模式绑定,因为它在使用这些函数的查询中产生了显着的性能改进。

如果我查找它已设置mytype为1,但设置为 0。sys.typesis_user_definedis_assembly_type

那么,“用户定义类型”和“CLR 类型”是同一事物的两个名称吗?“别名数据类型”有什么不同吗?它们似乎在create type. 当它真的意味着任何用户定义的类型时,这个错误消息是否只是通过引用“CLR 类型”而令人困惑?

我可以做我想做的事还是必须放弃别名类型声明或模式绑定?