我知道sql server不会选择底层表的模式更改。例如,如果我们执行以下的,自动选取模式更改底层表的视图
CREATE TABLE tbl (id INT)
CREATE VIEW viewa
AS
SELECT *
FROM tbl
ALTER TABLE tbl ADD NAME INT
并执行视图中选择,只有ID列返回
SELECT *
FROM viewa
有没有我可以设置通过SQL引擎autopicks架构的任何财产改变
我知道sql server不会选择底层表的模式更改。例如,如果我们执行以下的,自动选取模式更改底层表的视图
CREATE TABLE tbl (id INT)
CREATE VIEW viewa
AS
SELECT *
FROM tbl
ALTER TABLE tbl ADD NAME INT
并执行视图中选择,只有ID列返回
SELECT *
FROM viewa
有没有我可以设置通过SQL引擎autopicks架构的任何财产改变
使用sp_refreshview
为此,
exec sp_refreshview N'dbo.viewa'
您可以创建v用“SCHEMABINDING”选项浏览。这种方式的基表定义不能以影响视图定义的方式修改。
CREATE VIEW viewa
AS
SELECT *
FROM tbl SCHEMABINDING
谢谢Akshey。但是,要求是我可以更新表,但所有依赖于select *的应该自动选择新列 – sree
这里没有开箱即用的功能。但你可以推出自己的。 system tables详细列出了当前附加到每个视图和表的所有列。
-- Returns every column for the given table/view.
SELECT
c.*
FROM
sys.objects AS o
INNER JOIN sys.schemas AS s ON s.schema_id = o.schema_id
INNER JOIN sys.columns AS c ON c.object_id = o.object_id
WHERE
s.name = 'MySchema'
AND o.name = 'MyTable'
;
您需要创建一个控制表,将表映射到视图。你也需要安排这个过程。
“dbo.tbl”是表名。你应该指定视图名称代替表名称 –
thankx @AksheyBhat,已修改。 –
谢谢阿卜杜勒。但是,是否有任何服务器级属性可以设置为自动选择那些即使我们忘记执行proc?就像我用tbl中的select *创建了视图。即使我不运行任何特效,我需要通过设置一些属性,如'set nocount ON'等等来查看所有列。 – sree