返回首页

介绍
本文讨论了在SQL Server中基本的,但大大误解的对象之一??"意见??附加层上的表,这使我们能够保护复杂或敏感的数据,根据我们的需要,可以被看作意见。它就像一个窗口,接触到的羊群,他们通过这个窗口可以看到房间内非常有选择性的项目。意见,因为是一个额外的层确保他们添加开销,但有一个折衷的情况下,当他们有很大的帮助。
由于我们出发,我们将尽力详细了解他们的理论解释,但不是通过一些实际的例子。 使用
我们开始创建3个表的产品,顾客放大器;预订。这些为我们演示的虚拟表。产品专卖店的零售商店的数据,一个标志列IsSalable基础上,我们把适销对路的产品,其价值。

CREATE TABLE PRODUCTS

(ProductID INT PRIMARY KEY CLUSTERED,

ProductDesc VARCHAR(50) NOT NULL,

ManufacturingDate DATETIME,

ExpiryDate DATETIME,

IsSalable BIT,--1 Salable/Active FOR 0 For NonSalable/Passive Product

Price MONEY NOT NULL

)

接下来,我们有一个客户表,其中存储用户名和密码的详细信息,为客户。{C}
最后,我创建了一个预订表,其中安置了所有来自不同客户的预订。
CREATE TABLE BOOKING

( BookingID INT IDENTITY(10,2) PRIMARY KEY CLUSTERED,

  ProductID INT REFERENCES dbo.Products(ProductID),

  CustID INT REFERENCES dbo.Customer(CustID),

  DateOfBooking DATETIME NOT NULL,

  QTY INT

)

接下来,将这些表中插入几个记录:{体C3}
我们的表的内容是这个样子。我知道表是不完全的正常化,现在请忽略他们,这些都是简单的演示表。{的C4}
一位顾客购买/书籍记录到的预订表,现在生成账单上​​他的名字,我们可以使用VIEW,这将有助于我们做一个物理表,产品和同样得到。相反,它将使我们能够生成该法案的基础上,从这些表本身的信息。让我们来看看它是如何可能。{C5的} {5233}
我们已经能够生成基于3个表,因此法案,我们不仅优化法案一代,我们已经保存自己托管在这个信息的数据库物理表。这是最可靠的使用视图,它不仅能减少明显的复杂性,但也防止数据库中的数据冗余主机。
接下来说有一些API,使客户服务主管,查看客户信息的详细信息。现在暴露的密码,可能是有风险的,它是严格保密的信息。
我们创建了一个可以接触到的API:{C7-}
我们创建一个可以通过API用于获取客户的详细信息??减号)密码列。视图可以用来防止敏感信息被选中,同时还允许其他重要数据。
看法没有一个物理的存在,但他们仍然不设置为一个表确实返回一个记录集,区别是它只是一个额外的层调用底层的代码,最后返回的记录集。
当我执行的代码...{C8的}
...我得到的记录集,我会得到唯一的区别,在返回的数据表,按下面的查询是:
Select CustID

      ,FNAME AS [FIRST NAME]

      ,LNME AS [LAST NAME]

      ,UserID

FROM dbo.Customer

,但可以说,我们仍然得到一组记录,是不是?所以说,如果我的数据库中的客户有100万,是不是很酷,如果我都聚集在我为优化查询/非聚集索引。但它是可能的观点并不物理主机的数据,得到的答案是肯定的。视图上的索引,这是可能的。但在此之前,我们发现自己的视图上创建索引的能力,我们有以SCHEMABIND我们的看法。什么是通过SCHEMABINDING一个VIEW
架构绑定结合您的意见依赖物理视图的内容在指定的访问表列,即如果CustomerInfo_V是绑定到架构,没有人会能够改变dbo.Customer表,除非他们删除表。为什么我们需要它?
答案是,它可以防止你的意见被孤立。试想有人滴/改变表dbo.Customer,无需支付任何听取我们的观点。现在离开我们认为行不通。因此架构绑定它,这将阻止任何此类事故的发生。
也能在视图上创建索引,你需要它基本上是绑定到架构。
让我们做出改变:{C10的}爽现在我们有一个视图上的索引,请记住,你需要有一个唯一的聚集索引能够创建非聚集索引。其中,我的意思是我可以创建以下索引强制张贴的Bill_View_Indx的创作。{C11的} 因此,视图下使用的是能够创造分贝时附加的索引,以加快您的查询性能。特点
只意味着在定制模式下读取数据的意见?没有真正的看法也方便的DML(插入/更新/删除)。但有一组规则,这需要坚持,使直调雷射。如果你正在使用一个视图中插入数据,那么你认为应该有一个单一的选择,也表"正在编辑??强制性的所有列必须包含在视图,除非表的所有NOT NULL的默认值表列。其次不要忘记,有意见吗??代码>了WITH CHECK??选项启用,重要的是要记住的数据开始插入限定在WHERE子句的看法,是一定要选择视图。简单地把数据插入拾取当你选择从您的看法。如果视图连接多个表,那么大多数情况下,修改能力的机会是微乎其微的,除非INSTEAD OF触发器是在placenbsp来处理请求。
牢记这些,让我们把一个例子,执行插入/更新/删除。
我改变如下查看:{C12的}插入
INSERT INTO CustomerInfo_V

([FIRST NAME],[LAST NAME],UserID)

VALUES ('Gurum','Ramaswamy','G.Ram@qrs.com')

插入发生的,因为虽然列的CustID和PSWD是强制性的,但客户ID是身份和回PSWD有一个默认的。强制所有其他数据提供的插入查询。
SELECT * FROM Customer



CustID      FName     LNme    UserID           Pswd

--------- -------- ---------- ---------------  ---------

1002        Sara   Verma      S.Verma@abc.com  S123

1004        Rick   Singh      G.Singh@xyz.com  G311

1006        Micky  Khera      M.Khera@mno.com  M222

1008        Gurum  Ramaswamy  G.Ram@qrs.com    password123



(4 row(s) affected)
更新
UPDATE CustomerInfo_V

SET [FIRST NAME]='Gurumoorthy'

WHERE [FIRST NAME]='Gurum'



SELECT * FROM Customer
{C16的}删除{C17的}{C18的}
另外,我做的是在我的SSMS中。
GT工具选项GT环境GT GT键盘CTRL-F1 ==存储过程sp_helptext
从下一次,看到浏览/ StoreProcedure的内容,只要选中它,按Ctrl的F1?清爽点击
以防万一,我们的工作与非架构绑定视图的基础表中有一些变化,以防止产生意外的结果的看法,我们有一个选项,以刷新视图:{C19的}
这是更新的非架构绑定视图的元数据。加密你的意见
??代码>加密??选项加密通过存储过程sp_helptext我指的是将不可见的意见,以便在严格要求的情况下,视图的内容不需要被曝光,此选项冻结的看法。重要的是要在一些归档保存的内容脚本能够检索任何改变代码。{C20的}
所以我们已经加密的看法,现在,如果我们尝试执行存储过程sp_helptext'dbo.Bill_V"。
其结果将是:{C21的}
不建议加密您的意见,除非你有它背后的原因很强烈。这是一些关键要素involved.nbsp,我希望下一次你的工作意见,本文将帮助您做出更好的决策。

回答

评论会员:OriginalGriff 时间:2012/02/06
{C22,}行不通的。你有正确的想法(ISH)之前注释掉:{C23的}就采取"1",关闭和使用的信息:
{C24的}
评论会员:游客 时间:2012/02/06
巴拉Selvanayagam:你并不需要的,而不是,填充label11,label12和label13第二次数据库查询可以读取从DataGrid1。希望这是你如何填充数据GridView的codeprespanclass="code-keyword"try/span{spanclass="code-keyword"using/span(SqlConnectionoConn=spanclass="code-keyword"new/spanSqlConnection(spanclass="code-string""/spanspanclass="code-string"Datasource=localhost;database=Test_db;user=sa;password=admin1990"/span)){oConn.Open();SqlDataAdapteroDa=spanclass="code-keyword"new/spanSqlDataAdapter(spanclass="code-string""/spanspanclass="code-string"SelectPrefix,first,lastfromcontactmngt"/span,oConn);DataSetods=spanclass="code-keyword"new/spanDataSet();oDa.Fill(ods); dg.DataSource=ods.Tables[spanclass="code-digit"0/span].DefaultView;}}spanclass="code-keyword"catch/span(Exceptionex){MessageBox.Show(ex.Message);}/pre/code2。在DataGridView"的SelectionChanged"事件,你可以尝试codeprelang="cs"spanclass="code-keyword"private/spanspanclass="code-keyword"void/spandg_SelectionChanged(spanclass="code-keyword"object/spansender,EventArgse){spanclass="code-keyword"if/span(dg.CurrentRow!=spanclass="code-keyword"null/span)lblFirst.Text=dg.CurrentRow.Cells[spanclass="code-string""/spanspanclass="code-string"first"/span].Value.ToString();}/pre/code希望这有助于-巴拉-|