回 帖 发 新 帖 刷新版面

主题:求助。。。谢谢。。。

问题是对视图的修改,我不知道怎么用alter语句,也不知道他有什么格式,他有什么作用,只是修改吗?希望各位指点,给我个具体的例子..谢谢

回复列表 (共2个回复)

沙发

ALTER VIEW
更改一个先前创建的视图(用 CREATE VIEW 创建),包括索引视图,但不影响相关的存储过程或触发器,也不更改权限。有关 ALTER VIEW 语句中所用参数的更多信息,请参见 CREATE VIEW。 

语法
ALTER VIEW [ < database_name > .] [ < owner > .] view_name [ ( column [ ,...n ] ) ] 
[ WITH < view_attribute > [ ,...n ] ] 
AS
    select_statement 
[ WITH CHECK OPTION ] 

< view_attribute > ::=
    { ENCRYPTION | SCHEMABINDING | VIEW_METADATA } 

参数
view_name

是要更改的视图。 

column

是一列或多列的名称,用逗号分开,将成为给定视图的一部分。
重要  只有在 ALTER VIEW 执行前后列名称不变的情况下,列上的权限才会保持不变。
说明  在视图的各列中,列名的权限在 CREATE VIEW 或 ALTER VIEW 语句间均适用,与基础数据源无关。例如,如果授予了 CREATE VIEW 语句中 title_id 列上的权限,那么 ALTER VIEW 语句可以将 title_id 列改名(例如改为 qty),但权限仍与使用 title_id 的视图上的权限相同。

n

是表示 column 可重复 n 次的占位符。

WITH ENCRYPTION

加密 syscomments 表中包含 ALTER VIEW 语句文本的条目。使用 WITH ENCRYPTION 可防止将视图作为 SQL Server 复制的一部分发布。

SCHEMABINDING

将视图绑定到架构上。指定 SCHEMABINDING 时,select_statement 必须包含由所引用的表、视图或用户定义函数组成的两部分名称 (owner.object)。

不能除去参与到用架构绑定子句创建的视图中的视图或表,除非该视图已被除去或更改而不再具有架构绑定。否则,SQL Server 会产生错误。另外,对于参与具有架构绑定的视图的表,如果其上的 ALTER TABLE 语句影响了该视图的定义,则这些语句将会失败。

VIEW_METADATA

在为引用视图的查询请求浏览模式元数据时,指定 SQL Server 将向 DBLIB、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不是返回基表或表。浏览模式元数据是由 SQL Server 向客户端 DB-LIB、ODBC 和 OLE DB API 返回的附加元数据,它允许客户端 API 实现可更新的客户端游标。浏览模式元数据包含有关结果集内的列所属基表的信息。

对于用 VIEW_METADATA 选项创建的视图,当在结果集中描述视图内的列时,浏览模式元数据返回相对于基表名的视图名。

当用 VIEW_METADATA 创建视图时,如果该视图具有 INSERT 或 UPDATE INSTEAD OF 触发器,则视图的所有列(timestamp 除外)都是可更新的。
AS

是视图要执行的操作。

select_statement

是定义视图的 SELECT 语句。 

WITH CHECK OPTION

强制视图上执行的所有数据修改语句都必须符合由定义视图的 select_statement 设置的准则。 


例 :

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

ALTER    view dyall as 
SELECT *
FROM AA.DBO.DYALL
UNION
SELECT *
FROM AB.DBO.DYALL

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

本例是对一个名为DYall的视图进行修改

SET QUOTED_IDENTIFIER和SET ANSI_NULLS的用法如下:
SET QUOTED_IDENTIFIER { ON | OFF }

注释
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。

当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。

当 SET QUOTED_IDENTIFIER 为 OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。

当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。在进行连接时,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 设置默认为 OFF。

当创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,用于该存储过程的后续调用。

当在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。


SET ANSI_NULLS
指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为。

语法
SET ANSI_NULLS {ON | OFF}

注释
SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。

当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。


当 SET ANSI_DEFAULTS 为 ON时,将启用 SET QUOTED_IDENTIFIER。

SET QUOTED_IDENTIFIER 还与 sp_dboption 的 quoted identifier 设置相对应。如果 SET QUOTED_IDENTIFIER 为 OFF,则 SQL Server 使用 sp_dboption 的 quoted identifier 设置。
SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。

板凳

太谢谢你了,非常感谢。我现在明白了...

我来回复

您尚未登录,请登录后再回复。点此登录或注册