在向其中一个表

时间:2015-06-16 20:04:36

标签: sql view refresh

在为构成视图的其中一个表添加默认约束后,我究竟能如何刷新视图?我试图使用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组合的所有查询必须在其目标列表中具有相同数量的表达式。但是,我正在遵循官方文档中的查询格式。我可以尝试解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

而不是"选择*"指定列是值得的。我怀疑在一个表或另一个表中有不同数量的列。

一个好的测试是从table1 / table2等中做select *,看看他们带回来了什么