sql出現(xiàn)列名無效的原因 如何更新視圖中的數(shù)據(jù)?
如何更新視圖中的數(shù)據(jù)?更新視圖有三條規(guī)則:(1)如果使用連接操作基于多個(gè)表導(dǎo)出視圖,則每次更新視圖時(shí),只有一個(gè)表會(huì)受到影響。(2) 如果使用分組和聚合操作導(dǎo)出視圖,則不允許更新視圖。(3) 如果視圖是
如何更新視圖中的數(shù)據(jù)?
更新視圖有三條規(guī)則:(1)如果使用連接操作基于多個(gè)表導(dǎo)出視圖,則每次更新視圖時(shí),只有一個(gè)表會(huì)受到影響。(2) 如果使用分組和聚合操作導(dǎo)出視圖,則不允許更新視圖。(3) 如果視圖是通過選擇和投影從表中派生出來的,并且在視圖中包含表的主鍵或候選鍵,則這種視圖稱為行-列-子集視圖??梢詫?duì)這些視圖執(zhí)行更新。只有滿足以下條件時(shí)才能更新視圖:1。select語句在選擇列表中沒有聚合函數(shù),也不包含top、group by、Union(除非視圖已分區(qū))或distinct子句。只要不修改from子句返回的值,就可以在子查詢中使用聚合函數(shù)。2select語句的select列表中沒有派生列。派生列是由任何非簡單列表表達(dá)式(使用函數(shù)、加法或減法運(yùn)算符等)組成的結(jié)果集列。三。select語句中的from子句至少引用了一個(gè)表。select語句不能只包含非表格式表達(dá)式(即不是從表派生的表達(dá)式)。4在insert、update和delete語句引用可更新視圖之前,它們必須滿足上述條件中指定的某些限制。只有當(dāng)視圖可以更新并且update或insert語句只修改視圖的from子句引用的基表中的數(shù)據(jù)時(shí),update和insert語句才能引用視圖。只有當(dāng)視圖在from子句中只引用一個(gè)表時(shí),delete語句才能引用可更新視圖
視圖是VFP提供的強(qiáng)大的數(shù)據(jù)處理功能。使用view,不僅可以從數(shù)據(jù)表中提取一組記錄,還可以在必要時(shí)更改記錄值,并在源數(shù)據(jù)表中反映更新的結(jié)果。但是VFP中的新視圖無法更新。我們需要修改視圖的屬性來更新它。在更新視圖之前,需要在視圖中至少選擇一個(gè)更新屬性選項(xiàng)。
2. 在實(shí)際應(yīng)用中,我們經(jīng)常需要臨時(shí)生成一個(gè)視圖,因此我們必須使用程序來修改視圖的屬性,以便對(duì)其進(jìn)行更新,例如:使用xjmonthcreate SQL view xjview as select*from xjmonth where department name=ksmuse Xjviewcursorsetprop(“keyfieldlist”,“name”*設(shè)置視圖和基表對(duì)應(yīng)的鍵字段。關(guān)鍵字字段必須是唯一的,否則在發(fā)送SQL更新時(shí)會(huì)出錯(cuò)。Cursorsetprop(“sendupdates”,。T.)*打開SQL update開關(guān)以啟用視圖來更新基表。此外,cursorsetprop函數(shù)還可以用來設(shè)置update字段(默認(rèn)值為all fields)、基表別名、update方法等屬性,但實(shí)際上大部分默認(rèn)值都可以滿足需要。您只需要設(shè)置關(guān)鍵字并打開SQL update開關(guān)。另一個(gè)使地圖識(shí)別可更新的函數(shù)是dbsetprop(),它可以為當(dāng)前數(shù)據(jù)庫或當(dāng)前數(shù)據(jù)庫中的字段、命名連接、表或視圖設(shè)置屬性。然而,dbsetprop()要求獨(dú)占當(dāng)前數(shù)據(jù)庫,而cursortsetprop()可以修改遠(yuǎn)程視圖或臨時(shí)表的屬性,因此還涉及緩沖訪問和更新。此外,它們之間還存在一些語法差異。