在向其中一个表添加默认约束后刷新 SQL 视图
Refreshing SQL view after adding a default constraint to one of its tables
在向构成视图的 table 之一添加默认约束后,我究竟该如何刷新视图?我尝试使用 sp_refreshview 存储过程,但实际上并没有更新视图。这是我为使用默认值更新其中一列而编写的代码:
ALTER TABLE chosenTable
ADD CONSTRAINT defaultConstraint
DEFAULT '1' FOR selectedColumn
这是我用来查看在 运行 上述代码之前和之后是否存在约束的代码:
SELECT object_definition(default_object_id) AS definition
FROM sys.columns WHERE name = 'selectedColumn'
AND object_id = object_id('choseTable')
前面的语句可用于查看该名称的列是否也已在视图中更新。问题是该列在 table 本身中有约束,但约束没有添加到视图中。在尝试 sp_refreshview 但没有成功之后,我被卡住了。我将不胜感激任何不直接涉及删除视图并重新创建它的提示。但是,如果这是唯一的解决方案,是否只是使用 DROP 命令然后使视图恢复正常的问题?
删除视图后,这是我尝试重新创建它的尝试。它不允许我重新创建它:
CREATE VIEW newView
AS SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
UNION ALL
SELECT * FROM table4
它说 synax 不正确并且 'CREATE VIEW' 必须是批处理中唯一的语句。尝试 运行 它表示所有使用 UNION 组合的查询在其目标列表中必须具有相同数量的表达式。但是,我遵循官方文档中的查询格式。我可以尝试解决这个问题吗?
而不是 "select *" 指定您的列是值得的。我怀疑在一个 table 或另一个中有不同数量的列。
一个好的测试是做 select * 来自 table1/table2 等等,看看他们带回了什么
在向构成视图的 table 之一添加默认约束后,我究竟该如何刷新视图?我尝试使用 sp_refreshview 存储过程,但实际上并没有更新视图。这是我为使用默认值更新其中一列而编写的代码:
ALTER TABLE chosenTable
ADD CONSTRAINT defaultConstraint
DEFAULT '1' FOR selectedColumn
这是我用来查看在 运行 上述代码之前和之后是否存在约束的代码:
SELECT object_definition(default_object_id) AS definition
FROM sys.columns WHERE name = 'selectedColumn'
AND object_id = object_id('choseTable')
前面的语句可用于查看该名称的列是否也已在视图中更新。问题是该列在 table 本身中有约束,但约束没有添加到视图中。在尝试 sp_refreshview 但没有成功之后,我被卡住了。我将不胜感激任何不直接涉及删除视图并重新创建它的提示。但是,如果这是唯一的解决方案,是否只是使用 DROP 命令然后使视图恢复正常的问题?
删除视图后,这是我尝试重新创建它的尝试。它不允许我重新创建它:
CREATE VIEW newView
AS SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
UNION ALL
SELECT * FROM table4
它说 synax 不正确并且 'CREATE VIEW' 必须是批处理中唯一的语句。尝试 运行 它表示所有使用 UNION 组合的查询在其目标列表中必须具有相同数量的表达式。但是,我遵循官方文档中的查询格式。我可以尝试解决这个问题吗?
而不是 "select *" 指定您的列是值得的。我怀疑在一个 table 或另一个中有不同数量的列。
一个好的测试是做 select * 来自 table1/table2 等等,看看他们带回了什么