在为构成视图的其中一个表添加默认约束后,我究竟能如何刷新视图?我试图使用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')
以前的语句可用于查看该名称的列是否也已在视图中更新。问题是列本身具有约束,但约束不会添加到视图中。在尝试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组合的所有查询必须在其目标列表中具有相同数量的表达式。但是,我正在遵循官方文档中的查询格式。我可以尝试解决这个问题吗?
答案 0 :(得分:1)
而不是"选择*"指定列是值得的。我怀疑在一个表或另一个表中有不同数量的列。
一个好的测试是从table1 / table2等中做select *,看看他们带回来了什么