存儲過程弊端
『壹』 隨著硬體性能的提升傳統的計算與存儲強耦合的方式有哪些弊端
隨著硬體性能的提升傳統的計算與存儲強耦合的方式有以下弊端。
計算與存儲強綁定,意味著兩種資源總有一個是浪費的。
我們在對伺服器進行選型的過程中,開始糾結是計算型、還是存儲型,大大增加復雜度和降低通用性在雲計算場景下,彈性的顆粒度是機器,不能真正做到資源的彈性。
『貳』 增加數據冗餘,避免連接查詢,這樣好嗎
本文首先討論了基於第三範式的燃褲資料庫表的基本設計,著重論述了建立主鍵和索引的策略和方案,然後從資料庫表的擴展設計和庫表對象的放置等角度概述了資料庫管理系統的優化方案。
關鍵詞: 優化(Optimizing) 第三範式(3NF) 冗餘數據(Rendant Data) 索引(Index) 數據分割(Data Partitioning) 對象放置(Object Placement)
1 引言
資料庫優化的目標無非是避免磁碟I/O瓶頸、減少CPU利用率和減少資源競爭。為了便於讀者閱讀和理解,筆者參閱了Sybase、Informix和Oracle等大型資料庫系統參考資料,基於多年的工程實踐經驗,從基本表設計、擴展設計和資料庫表對象放置等角度進行討論,著重討論了如何避免磁碟I/O瓶頸和減少資源競爭,相信讀者會一目瞭然。
2 基於第三範式的基本表設計
在基於表驅動的信息管皮含簡理系統(MIS)中,基本表的設計規范是第三範式(3NF)。第三範式的基本特徵是非主鍵屬性只依賴於主鍵屬性。基於第三範式的資料庫表設計具有很多優點:一是消除了冗餘數據,節省了磁碟存儲空間;二是有良好的數據完整性限制,即基於主外鍵的參照完整限制和基於主鍵的實體完整性限制,這使得數據容易維護,也容易移植和更新;三老猛是數據的可逆性好,在做連接(Join)查詢或者合並表時不遺漏、也不重復;四是因消除了冗餘數據(冗餘列),在查詢(Select)時每個數據頁存的數據行就多,這樣就有效地減少了邏輯I/O,每個Cash存的頁面就多,也減少物理I/O;五是對大多數事務(Transaction)而言,運行性能好;六是物理設計(Physical Design)的機動性較大,能滿足日益增長的用戶需求。
在基本表設計中,表的主鍵、外鍵、索引設計佔有非常重要的地位,但系統設計人員往往只注重於滿足用戶要求,而沒有從系統優化的高度來認識和重視它們。實際上,它們與系統的運行性能密切相關。現在從系統資料庫優化角度討論這些基本概念及其重要意義:
(1)主鍵(Primary Key):主鍵被用於復雜的sql語句時,頻繁地在數據訪問中被用到。一個表只有一個主鍵。主鍵應該有固定值(不能為Null或預設值,要有相對穩定性),不含代碼信息,易訪問。把常用(眾所周知)的列作為主鍵才有意義。短主鍵最佳(小於25bytes),主鍵的長短影響索引的大小,索引的大小影響索引頁的大小,從而影響磁碟I/O。主鍵分為自然主鍵和人為主鍵。自然主鍵由實體的屬性構成,自然主鍵可以是復合性的,在形成復合主鍵時,主鍵列不能太多,復合主鍵使得Join*作復雜化、也增加了外鍵表的大小。人為主鍵是,在沒有合適的自然屬性鍵、或自然屬性復雜或靈敏度高時,人為形成的。人為主鍵一般是整型值(滿足最小化要求),沒有實際意義,也略微增加了表的大小;但減少了把它作為外鍵的表的大小。
(2)外鍵(Foreign Key):外鍵的作用是建立關系型資料庫中表之間的關系(參照完整性),主鍵只能從獨立的實體遷移到非獨立的實體,成為後者的一個屬性,被稱為外鍵。
(3)索引(Index):利用索引優化系統性能是顯而易見的,對所有常用於查詢中的Where子句的列和所有用於排序的列創建索引,可以避免整表掃描或訪問,在不改變表的物理結構的情況下,直接訪問特定的數據列,這樣減少數據存取時間;利用索引可以優化或排除耗時的分類*作;把數據分散到不同的頁面上,就分散了插入的數據;主鍵自動建立了唯一索引,因此唯一索引也能確保數據的唯一性(即實體完整性);索引碼越小,定位就越直接;新建的索引效能最好,因此定期更新索引非常必要。索引也有代價:有空間開銷,建立它也要花費時間,在進行Insert、Delete和Update*作時,也有維護代價。索引有兩種:聚族索引和非聚族索引。一個表只能有一個聚族索引,可有多個非聚族索引。使用聚族索引查詢數據要比使用非聚族索引快。在建索引前,應利用資料庫系統函數估算索引的大小。
① 聚族索引(Clustered Index):聚族索引的數據頁按物理有序儲存,佔用空間小。選擇策略是,被用於Where子句的列:包括范圍查詢、模糊查詢或高度重復的列(連續磁碟掃描);被用於連接Join*作的列;被用於Order by和Group by子句的列。聚族索引不利於插入*作,另外沒有必要用主鍵建聚族索引。
② 非聚族索引(Nonclustered Index):與聚族索引相比,佔用空間大,而且效率低。選擇策略是,被用於Where子句的列:包括范圍查詢、模糊查詢(在沒有聚族索引時)、主鍵或外鍵列、點(指針類)或小范圍(返回的結果域小於整表數據的20%)查詢;被用於連接Join*作的列、主鍵列(范圍查詢);被用於Order by和Group by子句的列;需要被覆蓋的列。對只讀表建多個非聚族索引有利。索引也有其弊端,一是創建索引要耗費時間,二是索引要佔有大量磁碟空間,三是增加了維護代價(在修改帶索引的數據列時索引會減緩修改速度)。那麼,在哪種情況下不建索引呢?對於小表(數據小於5頁)、小到中表(不直接訪問單行數據或結果集不用排序)、單值域(返回值密集)、索引列值太長(大於20bitys)、容易變化的列、高度重復的列、Null值列,對沒有被用於Where子語句和Join查詢的列都不能建索引。另外,對主要用於數據錄入的,盡可能少建索引。當然,也要防止建立無效索引,當Where語句中多於5個條件時,維護索引的開銷大於索引的效益,這時,建立臨時表存儲有關數據更有效。
批量導入數據時的注意事項:在實際應用中,大批量的計算(如電信話單計費)用C語言程序做,這種基於主外鍵關系數據計算而得的批量數據(文本文件),可利用系統的自身功能函數(如Sybase的BCP命令)快速批量導入,在導入資料庫表時,可先刪除相應庫表的索引,這有利於加快導入速度,減少導入時間。在導入後再重建索引以便優化查詢。
(4)鎖:鎖是並行處理的重要機制,能保持數據並發的一致性,即按事務進行處理;系統利用鎖,保證數據完整性。因此,我們避免不了死鎖,但在設計時可以充分考慮如何避免長事務,減少排它鎖時間,減少在事務中與用戶的交互,杜絕讓用戶控制事務的長短;要避免批量數據同時執行,尤其是耗時並用到相同的數據表。鎖的徵用:一個表同時只能有一個排它鎖,一個用戶用時,其它用戶在等待。若用戶數增加,則Server的性能下降,出現「假死」現象。如何避免死鎖呢?從頁級鎖到行級鎖,減少了鎖徵用;給小表增加無效記錄,從頁級鎖到行級鎖沒有影響,若在同一頁內競爭有影響,可選擇合適的聚族索引把數據分配到不同的頁面;創建冗餘表;保持事務簡短;同一批處理應該沒有網路交互。
(5)查詢優化規則:在訪問資料庫表的數據(Access Data)時,要盡可能避免排序(Sort)、連接(Join)和相關子查詢*作。經驗告訴我們,在優化查詢時,必須做到:
① 盡可能少的行;
② 避免排序或為盡可能少的行排序,若要做大量數據排序,最好將相關數據放在臨時表中*作;用簡單的鍵(列)排序,如整型或短字元串排序;
③ 避免表內的相關子查詢;
④ 避免在Where子句中使用復雜的表達式或非起始的子字元串、用長字元串連接;
⑤ 在Where子句中多使用「與」(And)連接,少使用「或」(Or)連接;
⑥ 利用臨時資料庫。在查詢多表、有多個連接、查詢復雜、數據要過濾時,可以建臨時表(索引)以減少I/O。但缺點是增加了空間開銷。
除非每個列都有索引支持,否則在有連接的查詢時分別找出兩個動態索引,放在工作表中重新排序。
3 基本表擴展設計
基於第三範式設計的庫表雖然有其優越性(見本文第一部分),然而在實際應用中有時不利於系統運行性能的優化:如需要部分數據時而要掃描整表,許多過程同時競爭同一數據,反復用相同行計算相同的結果,過程從多表獲取數據時引發大量的連接*作,當數據來源於多表時的連接*作;這都消耗了磁碟I/O和CPU時間。
尤其在遇到下列情形時,我們要對基本表進行擴展設計:許多過程要頻繁訪問一個表、子集數據訪問、重復計算和冗餘數據,有時用戶要求一些過程優先或低的響應時間。
如何避免這些不利因素呢?根據訪問的頻繁程度對相關表進行分割處理、存儲冗餘數據、存儲衍生列、合並相關表處理,這些都是克服這些不利因素和優化系統運行的有效途徑。
3.1 分割表或儲存冗餘數據
分割表分為水平分割表和垂直分割表兩種。分割表增加了維護數據完整性的代價。
水平分割表:一種是當多個過程頻繁訪問數據表的不同行時,水平分割表,並消除新表中的冗餘數據列;若個別過程要訪問整個數據,則要用連接*作,這也無妨分割表;典型案例是電信話單按月分割存放。另一種是當主要過程要重復訪問部分行時,最好將被重復訪問的這些行單獨形成子集表(冗餘儲存),這在不考慮磁碟空間開銷時顯得十分重要;但在分割表以後,增加了維護難度,要用觸發器立即更新、或存儲過程或應用代碼批量更新,這也會增加額外的磁碟I/O開銷。
垂直分割表(不破壞第三範式),一種是當多個過程頻繁訪問表的不同列時,可將表垂直分成幾個表,減少磁碟I/O(每行的數據列少,每頁存的數據行就多,相應佔用的頁就少),更新時不必考慮鎖,沒有冗餘數據。缺點是要在插入或刪除數據時要考慮數據的完整性,用存儲過程維護。另一種是當主要過程反復訪問部分列時,最好將這部分被頻繁訪問的列數據單獨存為一個子集表(冗餘儲存),這在不考慮磁碟空間開銷時顯得十分重要;但這增加了重疊列的維護難度,要用觸發器立即更新、或存儲過程或應用代碼批量更新,這也會增加額外的磁碟I/O開銷。垂直分割表可以達到最大化利用Cache的目的。
總之,為主要過程分割表的方法適用於:各個過程需要表的不聯結的子集,各個過程需要表的子集,訪問頻率高的主要過程不需要整表。在主要的、頻繁訪問的主表需要表的子集而其它主要頻繁訪問的過程需要整表時則產生冗餘子集表。
注意,在分割表以後,要考慮重新建立索引。
3.2 存儲衍生數據
對一些要做大量重復性計算的過程而言,若重復計算過程得到的結果相同(源列數據穩定,因此計算結果也不變),或計算牽扯多行數據需額外的磁碟I/O開銷,或計算復雜需要大量的CPU時間,就考慮存儲計算結果(冗餘儲存)。現予以分類說明:
若在一行內重復計算,就在表內增加列存儲結果。但若參與計算的列被更新時,必須要用觸發器更新這個新列。
若對表按類進行重復計算,就增加新表(一般而言,存放類和結果兩列就可以了)存儲相關結果。但若參與計算的列被更新時,就必須要用觸發器立即更新、或存儲過程或應用代碼批量更新這個新表。
若對多行進行重復性計算(如排名次),就在表內增加列存儲結果。但若參與計算的列被更新時,必須要用觸發器或存儲過程更新這個新列。
總之,存儲冗餘數據有利於加快訪問速度;但違反了第三範式,這會增加維護數據完整性的代價,必須用觸發器立即更新、或存儲過程或應用代碼批量更新,以維護數據的完整性。
3.3 消除昂貴結合
對於頻繁同時訪問多表的一些主要過程,考慮在主表內存儲冗餘數據,即存儲冗餘列或衍生列(它不依賴於主鍵),但破壞了第三範式,也增加了維護難度。在源表的相關列發生變化時,必須要用觸發器或存儲過程更新這個冗餘列。當主要過程總同時訪問兩個表時可以合並表,這樣可以減少磁碟I/O*作,但破壞了第三範式,也增加了維護難度。對父子表和1:1關系表合並方法不同:合並父子表後,產生冗餘表;合並1:1關系表後,在表內產生冗餘數據。
4 資料庫對象的放置策略
資料庫對象的放置策略是均勻地把數據分布在系統的磁碟中,平衡I/O訪問,避免I/O瓶頸。
⑴ 訪問分散到不同的磁碟,即使用戶數據盡可能跨越多個設備,多個I/O運轉,避免I/O競爭,克服訪問瓶頸;分別放置隨機訪問和連續訪問數據。
⑵ 分離系統資料庫I/O和應用資料庫I/O。把系統審計表和臨時庫表放在不忙的磁碟上。
⑶ 把事務日誌放在單獨的磁碟上,減少磁碟I/O開銷,這還有利於在障礙後恢復,提高了系統的安全性。
⑷ 把頻繁訪問的「活性」表放在不同的磁碟上;把頻繁用的表、頻繁做Join*作的表分別放在單獨的磁碟上,甚至把把頻繁訪問的表的欄位放在不同的磁碟上,把訪問分散到不同的磁碟上,避免I/O爭奪;
⑸ 利用段分離頻繁訪問的表及其索引(非聚族的)、分離文本和圖像數據。段的目的是平衡I/O,避免瓶頸,增加吞吐量,實現並行掃描,提高並發度,最大化磁碟的吞吐量。利用邏輯段功能,分別放置「活性」表及其非聚族索引以平衡I/O。當然最好利用系統的默認段。另外,利用段可以使備份和恢復數據更加靈活,使系統授權更加靈活。
『叄』 使用存儲過程過多有什麼弊端嗎什麼情況下使用存儲過程不好
拼語句確實不好
不過濾下參數,整不好型乎會被注入SQL的
最好埋參數
存儲過程好像是 比較復雜時候用的吧
我只卜源悉知道sql緩存, 如果一條語句執行過,下次再執裂者行就非常快了.不過要求挺苛刻,空格,大小寫啥的必須一摸一樣
『肆』 根據「存儲程序」的工作原理,說明計算機的工作過程
「存儲程序」原理,是將根據特定問題編寫的程序存放在計算機存儲器中,然後按存儲器中的存儲程序的首地址執行程序的第一條指令,以後就按照該程序的規定順序執行其他指令,直至程序結束執行。
1945年,美藉匈牙利科學家馮·諾依曼(J.Von Neumann)提出的,是現代計算機的理 存儲程序
論基礎。現代計算機已經發展到第四代,但仍遵循著這個原理。 存儲程序和程序控制原理的要點是,程序輸入到計算機中,存儲在內存儲器中(存儲原理),在運行時,控制器按地址順序取出存放在內存儲器中的指令(按地址順序訪問指令),然後分析指令,執行指令的功能,遇到轉移指令時,則轉移到轉移地址,再按地址順序訪問指令(程序控制)。
編輯本段技術特點
計算機系統由硬體系統和軟體系統兩大部分組成。馮·諾依曼結構(John von Neumann)也就是存儲程序奠定了現代計算機的基本結構,其特點是: 1)使用單一的處理部件來完成計算、存儲以及通信的工作。 2)存儲單元是定長的線性組織。 3)存儲空間的單元是直接定址的。 4)使用低級機器語言,指令通過操作碼來完成簡單的操作。 5)對計算進行集中的順序控制。 6)計算機硬體系統由運算器、存儲器、控制器、輸入設備、輸出設備五大部件組成並規定了它們的基本功能。 7)彩二進制形式表示數據和指令。 8)在執行程序和處理數據時必須將程序和數據道德從外存儲器裝入主存儲器中,然後才能使計算機在工作時能夠自動調整地從存儲器中取出指令並加以執行。
編輯本段發展歷程
「電子計算機之父」的桂冠,被戴在數學家 馮·諾依曼(J.Von Neumann)頭上, 而不是ENIAC的兩位實際研究者,這是因為馮·諾依曼提出了現代電腦的體系結構。 1944年夏,戈德斯坦在阿貝丁車站等候去費城的火車,偶然邂逅數學家馮·諾依曼教授。戈德斯坦告訴他莫爾學院的電子計算機項目。
開始研究
從1940年起,馮·諾依曼就是阿貝丁試炮場的顧問。他向戈德斯坦表示,希望親自到莫爾學院看看那台正在研製之中的機器。從此,馮· 諾依曼成為了莫爾小組的實際顧問,與小組成員頻繁地交換意見。年輕人機敏地提出各種設想,馮·諾依曼則運用他淵博的學識,把討論引向深入,並逐步形成電子計算機的系統 設計思想。 在ENIAC尚未投入運行前, 馮·諾依曼就看出這台機器致命的缺陷,主要弊端是程序 與計算兩分離。程序指令存放在機器的外部電路里,需要計算某個題目,必須首先用人工 接通數百條線路,需要幾十人干好幾天之後,才可進行幾分鍾運算。 馮·諾依曼決定起草一份新的設計報告,對電子計算機進行脫胎換骨的改造。他把新 機器的方案命名為「離散變數自動電子計算機」,英文縮寫是「EDVAC」。 1945年6月,馮 ·諾依曼與戈德斯坦、勃克斯等人,聯名發表了一篇長達101頁紙的報告,即計算機史上著名的「101頁報告」,直到今天,仍然被認為是現代電腦科學發展里程碑式的文獻。報告明確規定出計算機的五大部件,並用二進制替代十進制運算。EDVAC方案的革命意義在 於「存儲程序」,以便電腦自動依次執行指令。人們後來把這種「存儲程序」體系結構的 機器統稱為「諾依曼機」。由於種種原因,莫爾小組發生令人痛惜的分裂,EDVAC機器無法被立即研製。1946年6月, 馮·諾依曼和戈德斯坦、 勃克斯回到普林斯頓大學高級研究院,先期完成了另一台 ISA電子計算機(ISA是高級研究院的英文縮寫),普林斯頓大學也成為電子計算機的研究中心。
宣告完成
直到1951年,在極端保密情況下,馮·諾依曼主持的EDVAC計算機才宣告完成,它不僅可應用於科學計算,而且可用於信息檢索等領域,主要緣於「存儲程序」的威力。 EDVAC只用了3563隻電子管和1萬只晶體二極體,以1024個44比特水銀延遲線來儲存程序和 數據,消耗電力和佔地面積只有ENIAC的1/3。 最早問世的內儲程序式計算機既不是ISA,也不是EDVAC,英國劍橋大學威爾克斯(M.Wilkes)教授,搶在馮·諾依曼之前捷足先登。 威爾克斯1946年曾到賓夕法尼亞大學參加馮·諾依曼主持的培訓班,完全接受了馮· 諾依曼內儲程序的設計思想。回國後,他立即抓緊時間,主持新型電腦的研製,並於1949 年5月,製成了一台由3000隻電子管為主要元件的計算機,命名為「EDSAC」(電子儲存程序計算機)。威爾克斯後來還摘取了1967年度計算機世界最高獎——「圖林獎」。
榮譽
在馮·諾依曼研製ISA電腦的期間,美國涌現了一批按照普林斯頓大學提供的ISA照片 結構復制的計算機。 如:洛斯阿拉莫斯國家實驗室研製的MANIAC,伊利諾斯大學製造的 ILLAC。雷明頓·蘭德公司科學家沃爾(W. Ware)甚至不顧馮·諾依曼的反對,把他研製 的機器命名為JOHNIAC(「約翰尼克」 ,「約翰」即馮·諾依曼的名字)。馮·諾依曼的大名已經成為現代電腦的代名詞,1994年,沃爾被授予計算機科學先驅獎,而馮·諾依曼本人則被追授予美國國家基礎科學獎。
編輯本段主要成果
「英國劍橋大學威爾克斯(M.Wilkes)研製的EDSAC」(電子儲存程序計算機)。 洛斯阿拉莫斯國家實驗室研製的MANIAC。 伊利諾斯大學製造的 ILLAC。雷明頓·蘭德公司科學家沃爾(W. Ware)研製的機器JOHNIAC 以及早期的微處理器大多採用馮諾依曼結構,典型代表是Intel公司的X86微處理器。取指和去操作數都在同一匯流排上,通過分時服用的方式進行的。缺點是在高速運行時,不能達到同時取指令和取操作數,從而形成了傳輸過程的瓶頸。
『伍』 十二存單法有什麼弊端
資金靈活性較液搭鎮差、收益率偏低
「十二存單法是整存整取,每一筆單獨的存款都是定期。這樣一來,它的弊端也比較明顯,如資金靈活性較差、收益率偏低。不過大部分人選擇這種方法投資,主要是看中了它的優勢。它的優勢有安全性高、收益穩定、循環投資、投資方便,可以說優勢要大於弊端。」
拓展資料:
由個人或企業獨自進行財富的積累和貯藏效率是比較低的。
1.首先,每個人即使貯藏數量很多也未必能保證需要。
其次,分散貯藏增加了全社會貯藏財富的總量,這樣不僅增加了貯藏過程中財富的損耗,而且處於貯藏狀態的財富得不到充分利用,社會經濟效率必然是低下的。把個人的貯藏轉化為社會性的貯藏,用較少的貯藏貨幣滿足更多的使用需求。因為當很多人分散貯藏時可能每個人的錢都不夠解決自己問題的,而集中貯藏和使用時,則可以解決任何一個人的問題。同時減少貯藏財富總量,可以把更多的資源用於生產經營,增加社會財富。社會性貯藏意味著有些人要使用他人的貯藏,也就是在用信用代替貯藏。
2.把貨幣作為貯藏手段可能造成生產和消費的不平衡,造成宏觀經濟波動。要避免這種情況應盡量減少貨幣作為貯藏手段使用,而貨幣的支付枝返手段職能可以部分取代貯藏手段職能。對需要儲蓄的人來說,以現金方式存儲或者以債券方式存儲都是可以的,現金的優勢在於流動性強,債券的優勢在於可以生息。但從宏觀經濟角度看,則二者的效果完全不同。如果以現金方式存儲,則這部分貨幣從流通中漏出,流通中的貨幣數量減少,影響物鬧粗價的穩定並進而影響生產。如果以債券方式存儲,則這部分貨幣又到了另一些人手中,繼續參與經濟循環,只是使用者改變,對經濟沒有影響。從社會合作的角度看,信用借貸是人與人之間的合作,而貯藏是個人的行為,前者比後者有更高的效率和更好的社會效果是很自然的事。
『陸』 調用存儲過程sql 語句怎麼寫
存儲過程中執行動態Sql語句
MSSQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;通常,sp_executesql則更具有優勢,它提供了輸入輸出介面,而EXEC沒有。還有一個最大的好處就是利用sp_executesql,能夠重用執行計劃,這就大大提供了執行性能,還可以編寫更安全的代碼。EXEC在某些情況下會更靈活。除非您有令人信服的理由使用EXEC,否側盡量使用sp_executesql.
1.EXEC的使用
EXEC命令有兩種用法,一種是執行一個存儲過程,另一種是執行一個動態的批處理。以下所講的都是第二種用法。
下面先使用EXEC演示一個例子,代碼1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
註:這里的EXEC括弧中只允許包含一個字元串變數,但是可以串聯多個變數,如果我們這樣寫EXEC:
EXEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+
QUOTENAME(@TableName) +' ORDER BY ORDERID DESC');
SQL編譯器就會報錯,編譯不通過,而如果我們這樣:
EXEC(@sql+@sql2+@sql3);
編譯器就會通過;
所以最佳的做法是把代碼構造到一個變數中,然後再把該變數作為EXEC命令的輸入參數,這樣就不會受限制了。
EXEC的缺點是不提供介面,這里的介面是指,它不能執行一個包含一個帶變數符的批處理,如下
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +
'WHERE OrderID = @OrderID ORDER BY ORDERID DESC'
EXEC(@sql);
關鍵就在SET @sql這一句話中,如果我們運行這個批處理,編譯器就會產生一下錯誤
Msg 137, Level 15, State 2, Line 1
必須聲明標量變數 "@OrderID"。
使用EXEC時,如果您想訪問變數,必須把變數內容串聯到動態構建的代碼字元串中,如:
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + 'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
串聯變數的內容也存在性能方面的弊端。SQL Server為每一個的查詢字元串創建新的執行計劃,即使查詢模式相同也是這樣。為演示這一點,先清空緩存中的執行計劃
DBCC FREEPROCCACHE (這個不是本文所涉及的內容,您可以查看MS的MSDN)
將代碼1運行3次,分別對@OrderID 賦予下面3個值,10251,10252,10253。然後使用下面的代碼查詢
SELECT cacheobjtype,objtype,usecounts,sql FROM sys.syscacheobjects WHERE sql NOT LIKE '%cach%' AND sql NOT LIKE '%sys.%'
點擊F5運行,我們可以看到,每執行一次都要產生一次的編譯,執行計劃沒有得到充分重用。
EXEC除了不支持動態批處理中的輸入參數外,他也不支持輸出參數。默認情況下,EXEC把查詢的輸出返回給調用者。例如下面代碼返回Orders表中所有的記錄數
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT COUNT(ORDERID) FROM Orders';
EXEC(@sql);
然而,如果你要把輸出返回給調用批處理中的變數,事情就沒有那麼簡單了。為此,你必須使用INSERT EXEC語法把輸出插入到一個目標表中,然後從這表中獲取值後賦給該變數,就像這樣:
代碼
DECLARE @sql NVARCHAR(MAX),@RecordCount INT
SET @sql = 'SELECT COUNT(ORDERID) FROM Orders';
CREATE TABLE #T(TID INT);
INSERT INTO #T EXEC(@sql);
SET @RecordCount = (SELECT TID FROM #T)
SELECT @RecordCount
DROP TABLE #T2
2.sp_executesql的使用
sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要為重用執行計劃提供更好的支持。
為了和EXEC作一個鮮明的對比,我們看看如果用代碼1的代碼,把EXEC換成sp_executesql,看看是否得到我們所期望的結果
代碼
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql
注意最後一行;事實證明可以運行;
sp_executesql提供介面
sp_executesql命令比EXEC命令更靈活,因為它提供一個介面,該介面及支持輸入參數也支持輸出參數。這功能使你可以創建帶參數的查詢字元串,這樣就可以比EXEC更好的重用執行計劃,sp_executesql的構成與存儲過程非常相似,不同之處在於你是動態構建代碼。它的構成包括:代碼快,參數聲明部分,參數賦值部分。說了這么多,還是看看它的語法:
EXEC sp_executesql
@stmt= <statement>,--類似存儲過程主體
@params = <params>, --類似存儲過程參數部分,聲明參數類型
<params assignment> --類似存儲過程調用,為參數賦值,參數值要和參數順序要一一對應,也可以通過為參數指明參數值的方式為其賦值
@stmt參數是輸入的動態批處理,它可以引入輸入參數或輸出參數,和存儲過程的主體語句一樣,只不過它是動態的,而存儲過程是靜態的,不過你也可以在存儲過程中使用sp_executesql;
@params參數與定義輸入/輸出參數的存儲過程頭類似,實際上和存儲過程頭的語法完全一樣;
@<params assignment> 與調用存儲過程的EXEC部分類似。
其實@stmt,@params可以省略,那麼exec sp_executesql的語法就可以簡寫成如下格式:
EXEC sp_executesql
<statement>,
<params>,
<params assignment>
為了說明sp_executesql對執行計劃的管理優於EXEC,我將使用前面討論EXEC時用到的代碼。
代碼
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT;
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+@TableName + ' WHERE OrderID = @OID ORDER BY ORDERID DESC'
--注意當要對動態sql語句的表名實行參數化時,不可以如下表示:
--set @sql='select * from @TableName where OrderID=@OID ORDER BY Orderid desc',
--如果這樣會提示必須聲明標量變數@TableName,只可以如上面所寫的一樣,將表名@TableName作為變數名進行拼接
EXEC sp_executesql
@sql,
N'@OID int ',
@OID = @OrderID
下面我們看看exec sp_executesql的執行效率,在調用該代碼和檢查它生成的執行計劃前,先清空緩存中的執行計劃;
DBCC FREEPROCCACHE
將上面的動態代碼執行3次,每次執行都賦予@OrderID 不同的值,然後查詢sys.syscacheobjects表,並注意它的輸出,優化器只創建了一個備用計劃,而且該計劃被重用的3次
SELECT cacheobjtype,objtype,usecounts,sql FROM sys.syscacheobjects WHERE sql NOT LIKE '%cache%' AND sql NOT LIKE '%sys.%' AND sql NOT LIKE '%sp_executesql%'
點擊F5運行。
sq_executesql的另一個與其介面有關的強大功能是,你可以使用輸出參數為調用批處理中的變數返回值。利用該功能可以避免用臨時表返回數據,從而得到更高效的代碼和更少的重新編譯。定義和使用輸出參數的語法與存儲過程類似。也就是說,你需要在聲明參數時指定OUTPUT子句。例如,下面的靜態代碼簡單的演示了如何從動態批處理中利用輸出參數@p把值返回到外部批處理中的變數@i.
DECLARE @sql AS NVARCHAR(12),@i AS INT;
SET @sql = N' SET @p = 10';
EXEC sp_executesql
@sql,
N'@p AS INT OUTPUT',
@p = @i OUTPUT
SELECT @i --該代碼返回輸出10
以字母 N 為前綴標識 Unicode 字元串常量
總結以下幾點:
一.使用exce sp_executesql效率比exec要高,同一類型的語句,只需編譯一次即可,而exec執行幾次就需要編譯幾次。
二.構造動態sql的where子句,也就是條件子句時,exec無法使用變數來進行站位,需要將變數轉換成字元串,然後和動態sql進行拼接,這就可能引起Sql注入問題,如下:
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +
' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
而若使用exec sp_executesql則可以使用變數來進行站位,以後再給這個參數傳值的放式構造動態sql,就避免的Sql注入的問題,如下:
SET @sql = 'SELECT * FROM '+@TableName + ' WHERE OrderID = @OID ORDER BY ORDERID DESC'
三.無論是Exec還是Exec sp_executesql,如果想要將表名和列名進行動態參數化,不可以使用表名參數和列名參數來進行站位,而且表名參數和列名參數需要使用存儲過程的參數.對 於exec sp_executesql來說,不可以將表名參數和列名參數在指定為在exec sp_executesql參數聲明部分聲明的參數,如:
代碼
create PROCEDURE GetData
@tbName nvarchar(10),
@colName nvarchar(10),
@Name nvarchar(10)
AS
BEGIN
declare @sql nvarchar(50);
set @sql='select '+ @colName+' from ' +@tbName+ ' where name=@whereName';
--注意此句不可以寫成如下:
-- set @sql='select @colName from @tbName where name=@whereName';
exec sp_executesql
@sql,
N'@whereName nvarchar(10)',
@Name
END
也就是說exec sp_executesql語句的參數聲明部分只能聲明動態sql的where子句的參數。
『柒』 SQL 關聯欄位C#
直接在sqlserver中用觸發器不就行了,插入主表時添加字表
『捌』 中小企業存貨管理的會計論文
中小企業存貨管理的會計論文篇1
歲則中小企業存貨管理存在的問題及對策
摘 要:存貨管理是當前中小企業在生產經營管理過程中應高度關注的內容,庫存會涉及到生產經營的各個環節,並且貫穿著整個生產的流程,具有佔用資金大的特點,而且品種繁多,特別是業務涉及的范圍較廣,所以針對存貨的管理至關重要。提高庫存的工作效率,強化庫存的管理,是當前企業面臨的不可避免的研究課題,本文主要通過實踐中企業管理過程庫存管理的現狀進行詳細的分析,積極探索庫存管理過程中可友賀能面臨的關鍵性問題,制定出合理化的庫存管理戰略,強化中小企業在市場經濟中地位,提高市場競爭的軟實力,促進企業的快速健康發展。
關鍵詞:中小企業;存貨管理;庫存管理
一、加強中小企業存貨管理的必要性
目前,流動資產在中小企業的發展中起著關鍵性的作用,期間存貨會占據較高的比重,因存貨會貫穿於企業生產的全過程,從長遠的經濟利益來看,存貨如果管理不當將會影響到企業的長遠發展,長期經濟發展的戰略將會因此受到影響。企業如果想在競爭中保持一定的持續經營的水平,關鍵還在於內部的存貨管理,存貨占據企業的關鍵性位置,合理的規劃好企業的存貨,才能有效地整合企業資源,實現資源的優化配置,積極防止可能出現的存貨問題。現階段,中小企業處於創業發展的初步階段,內部管理各個方面的制度較為落後,將會在激烈的市場競爭中面臨巨大的挑戰,存貨的最大價值將會難以實現,所以企業更應該密切的關注於此問題的研究。
當前,存貨管理問題是中小企業需要亟待解決的問題,有效的存貨管理能夠實現管理的目標。流動資產是否安全和完整,是財務管理的關鍵,還是企業財務收支保證的關鍵。針對中小企業存貨管理的研究,可以確保企業實現內部自我的調整,存貨管理部門彼此間形成制約和監督,對現實具有實際的借鑒意義。我國市場經濟在不斷的發展和壯大中,中小企業逐漸成為國內外關注的焦點,中小企業具有生命力旺盛的特點,在市場經濟的發展中起著無法衡量的價值,但是中小企業內部管理上仍然會暴露出一系列的管理問題,其中存貨管理的意識淡薄,只有更好的完善存貨管理,才能降低存貨管理資金,促進中小企業健康快速的發展。
二、中小企業存貨管理存在的問題分析
1.庫存積壓現象較為明顯,存儲量設置較為不合理。很多中小企業流動資金往往都是被庫存所佔用,很多中小企業的倉儲管理較差,導致存貨積壓嚴重,佔用了大量的流動資金,導致企業流動資金額度逐年呈上升的趨勢,這樣會大量的佔用資金,阻礙企業進行生產經營的周轉,尤其是存貨儲備資金佔用的明顯,占流動資金總額的比重較大,資金管理就會產生困難,甚至有時會出現資金周轉的問題。據相關數據統計,大部分中小企業存貨資金的管理佔用資產總額的40%左右,雖然各個行業的標准不一致,但是其所佔的比重來看,仍然是屬於較高的比重,其還仍然是不容忽視的問題。但是企業還是疏於對其的管理,導致流動資金管理出現問題,不嚴加的管理將會導致資金周轉的速度逐漸成下降的趨勢,長期來看影響是巨大的,達到一定的影響後將會嚴重阻礙企業正常生產經營活動。
2.庫存管理人員崗位職權劃分不清,內部控制制度職能落實不到位。追求利益最大化雖然是企業的目標,但是盲目的追求就會導致一系列的弊端,例如內乎告棚控管理上制度設置不合理,部門的人事管理較為落後,一個人身兼多職的現象仍然普遍,在加上很多崗位在設置崗位時就沒有明確崗位的職責,往往沒有特別專注於庫存的管理,對最初存貨的購買等如果稍加註意,就會避免可能存在的存貨滯留,有時很多工作人員忽視對存貨的保管,在相關數據的記錄上缺乏認真的態度,記錄數據往往是應付差事,結果就是喪失了大量的庫存浪費。
3.第三方物流沒有真正的應用,合理優化內部和外部物流資源是關鍵。傳統上只是簡單的對內部物流進行管理,長期形成一定的慣性,因此,整合物流資源上卻忽視了對外部物流資源的利用,仍然堅持原有的內部自營物流為主,長期還會忽視很多內部資源的浪費,特別是人力、財力和物力。縱觀存貨管理的全過程,從采購、入庫、領用、出庫的各個環節都需要積極有效的整合,真正的整合好內部資源,才能真正的利用好物流資源。對外物流管理上,第三方物流管理的利用率較低,往往觀念上較為傳統,沒有形成開放性的思維模式。由於內部物流的長期使用,導致成本較高,雖然好似節省了一定的外部費用,但是根本上還是影響到了企業的利潤,增加了部分的成本費用,影響到了利潤最大化的目標。
4.存貨內部管理制度中仍然存在弊端。傳統物流沒有將供應鏈很好地管理和整合,給企業的競爭策略帶來阻礙。傳統觀念上只是簡單的分散物流管理,缺乏供應鏈的整合認識,忽視整合帶來的價值。對建立全面的供應鏈系統管理的認識不足,片面的認為只是成本運輸管理,以及僅僅是采購成本的管理模式,忽視機會成本的損失。很多部門忽視對物流管理,特別是對其的成本管理,物流管理的各個部門間如果出現了問題,就只是進行相互的'推諉、相互扯皮,難以形成有效的溝通協調機制。
三、強化中小企業存貨管理的應對策略
1.提高企業員工的專業技能,強化職業技能培訓工作的力度。倉儲人員綜合素質的高低關乎企業長遠的發展,這樣特殊崗位的培訓工作,是企業進行倉儲管理的關鍵,尤其是選好優秀的倉儲管理人員是庫存管理的關鍵。建立人力資源管理制度,設置重重關卡,加強對專業用具的管理,強化考核力度,通過績效考核加強對專業用具的管理,良好的培訓學習管理,會調動工作的熱情,加強崗位的歸屬感,使之通過專業技能及專業知識的學習,快速的增加工作經驗,選擇學習成績較好的人員擔任重要的崗位,例如實行周期性的崗位輪換,定期進行盤點庫存的工作,加強對財務核算知識的學習,不斷提高財務管理的業務水平。
2.倉儲管理上選定適合的存儲結構,例如在訂貨管理上選擇合適的訂購方式,明確合理的方式方法後,在確定最佳的庫存存儲量。還可以採用經濟批量法進行合理的計算,計算出最佳的采購數,在保證質量的基礎上確定最佳的采購基數,以此確保量的提高,才能真正的保證內部存儲環境。良好的庫存管理能夠降低成本,及時訂購相關數量的庫存產品,防止不必要的產品積壓是關鍵,目的就是改變原有模式的弊端,真正實現降低總成本的目標。
中小企業存貨管理的會計論文篇2
中小企業存貨管理中的問題與解決對策
一、我國中小企業存貨管理的現狀
我國的證券市場起步於上世紀90年代初期,經過二十年發展,在上市公司會計信息披露方面取得了很大的成績。在經濟制度越發完善,監管部門權責更加分明,投資者對會計信息的要求越來越高的今天,上市公司會計信息披露正在向著好的方向發展,但依然存在著一些不足。
存貨是指企業在日常活動中持有以備出售的產成品或商品、處在生產過程中的在產品、在生產過程中或提供勞務過程中耗用的材料、物料等。存貨是企業賴以生存和發展的基本元素,是企業重要的流動資產,對它管理的好壞直接影響到企業的資金佔用水平以及資產運作,在企業管理中佔有重要地位。而存貨的管理一方面在於保證企業生產經營的需要,防止存貨的不足;另一方面加速存貨參與周轉,縮短存貨周轉時間,從而避免佔用過多的資金。
目前,由於許多企業,特別是一些中小企業,對存貨管理的重要性認識不足,管理粗放,所以表現出基礎薄弱、起點較低,其管理停留在單打獨的家族傳統粗放型的管理層次上,無健全的、完善的內部管理制度,更沒有認識或重視到企業存貨控制和管理經營過程中的重要環節。另一方面,國內許多企業甚至是上市公司,他們把過多的精力放在了生產和銷售上,忽視了存貨的限額和數量控制,從而造成存貨積壓,導致公司現金流出現斷裂,產品生產不暢、資金積壓嚴重等問題,嚴重製約了企業自身的發展。在新形勢下,中小企業應加強存貨管理力度,不斷完善內部管理結構,以適應不斷變化的市場環境。
二、我國中小企業存貨管理中存在的問題
(一)不完善的內部控制制度
中小企業普遍機構設置不完整,管理人員往往身兼數職。批准采購與驗收材料的許可權經常由倉庫主管一人所擁有,同時該部門負責對所采購的原材料與產成品的保管,這就缺乏許可權的相互制約,容易使內部人員,特別是倉庫主管利用存貨獲取個人利益,給企業造成不必要的損失。
(二)存貨管理的模式不合理
中小企業的存貨管理偏重與內部物流系統的利用,而忽視了企業外部物流資源的整合。一般中小企業的存貨管理都包括計劃、采購、儲存、領用、出庫等過程,這便佔用了大量的人力、財力、物力,顯然沒有充分利用和整合社會物流管理資源。而且,在存貨管理中,它注重了存貨的收、發、存的管理和實物保全,但對存貨的價值管理不夠重視。在管理手段上,中小企業更多注重運用數學模型,確定最佳經濟批量和最佳進貨時間,卻沒有通過優化業務流程,加強信息系統的建設來優化存貨管理。
(三)存貨計量的方法不恰當
中小企業在存貨的計價方法的選擇上不夠合理,不僅在材料的領用記錄、生產成本及費用的歸集、結轉的記錄方面人為的因素比較多,且對發出的存貨,採用了不同的計價方法對中小企業財務狀況和經營成果都會產生不同的影響。而且中小企業的存貨計價存在隨意性的特點,一方面對資產負債表的真實性產生影響,使會計報表的使用者無法真正了解企業擁有或控制的資產總額及構成情況;另一方面影響損益表的真實性,使其無法真正了解企業實現的利潤與發生的虧損情況,無法正確評價企業的經營業績;再一方面就是影響各項比率指標的分析,從而使會計資料的使用者造成錯誤的分析與決策。
三、關於我國中小企業存貨管理中的一些的建議
(一)完善企業內部控制
企業應當建立健全存貨管理制度,嚴格規定存貨的購進計價方法、發出方法、盤存方法,並且嚴格按照企業會計准則的規定,計價方法一經確定,不得隨意變更;企業應設置明確的請購、付款、銷售、收款、保管等崗位職責,對於人員較少的小單位來說,有的崗位職責可能會交叉,對於交叉的這些崗位,管理當局更應該關注職員的盡責情況以及採取相應的防範措施。存貨管理是由管理人員執行的,所以要加強存貨管理必須從加強存貨管理人員的培訓入手。
(二)制定適應企業自身情況的存貨采購流程
首先,是為了保證企業不間斷的生產對原材料的需求,應有一定的存儲量;其次,為了滿足產品銷售批量化、經常化的需要,更應該有足夠的半成品、產成品存儲量;再次,為了保證企業均衡生產並降低生產成本,應有一定的存儲量;最後,為了避免或減少經營中可能出現的失誤和意外事故對企業造成的損失,也應有一定的存儲量。因此,作為企業經營管理者必須對存貨科學的采購和控制庫存量的水平起到重要作用。
(三)改善企業存貨存儲過程缺陷
入庫過程是材料物資經驗收合格後入庫並錄入入庫單的過程;出庫過程是物資需求部門按照原需求計劃提出領料申請,經物資部門審核批准後發料並錄入出庫單的過程。對出入庫工作的管理,關鍵問題是監督機制的建立。企業財務部門應當每月對所有入庫單、出庫單進行核查,並形成財務憑證,實現財務管理物資管理的結合,至此完成物資在庫存過程的管理。
(四)加強企業存貨核算管理
存貨核算管理系統是企業通過應用物資管理系統實現效益目標。對存貨進行管理與核算,就是要通過對各項存貨的收發存業務進行會計處理,及時准確地將各類存貨成本歸集到各成本對象和成本項目上,並全面准確地掌握企業存貨的耗用狀況,實現物資在價值形態上的管理,動態地反映存貨資金的增減變動,提供存貨資金周轉和佔用情況的分析,為實現最佳儲備提供依據。在管理上,企業應特別建立應用機制,定期對企業存貨成本構成情況、存貨資金佔用情況、資金的使用效果情況進行控制與監督,同時,在特定條件下,不定期地對物資經營管理情況進行專項的或全面的控制與分析。
參考文獻:
[1]吉文麗。企業存貨管理的問題和思考[J].中國鄉鎮企業會計,2009,(05)
[2]王利敏。中小企業存貨管理存在的問題和對策[J].北京:中國人民大學出版社,2005
[3]陳斯雯。企業存貨核算與庫存管理技巧[M].北京:經濟科學出版社,2007,(7)
中小企業存貨管理的會計論文篇3
如何加強中小企業的存貨管理
摘要:國內經濟的快速發展對中小企業的存貨管理提出了更高的要求,進行有效的存貨管理已成為我國中小企業生存和發展的頭等要務。文章從加強存貨管理的重要性出發,分析了當前我國中小企業存貨管理中存在的主要問題,並提出了加強中小企業存貨管理的建議和對策。
關鍵詞:中小企業;存貨管理;對策
存貨是一把雙刃劍,它是企業供需平衡的根本保障,沒有存貨,企業就無法正常運行,然而,他也是企業的“墳墓”,一旦管理不善,存貨造成積壓、資金周轉困難以及由產品技術更新過快造成的存貨淘汰,就會給企業經營活動造成極大的障礙,同時由於存貨資金沉澱過多,增加企業資金使用成本和存貨風險成本,可能把企業拖入深淵,蒙受巨大的經濟損失。一直以來存貨問題始終困擾著中小企業的生產經營管理活動,影響中小企業經濟效益的實現,因此重視存貨管理,改善存貨管理,對提高中小企業的經營成果有重要的影響。
一、加強存貨管理的重要性
存貨屬於企業的流動資產,包括准備出售的產成品、仍在生產過程中的在產品、生產所要耗用的原材料和物料等。企業存貨的好處主要表現在能調節生產負荷、提高企業服務水平、獲得規模效益、降低物流成本等,過量存貨或存貨不足對企業的影響主要表現在過量存貨會增加存貨保管費用、佔用過多資金,導致資金周轉不靈、降低了材料或產品的質量、存貨不足時則會影響企業服務質量或是造成企業停工待料等問題。因此,我國中小企業加強存貨管理的意義主要表現為:首先加強存貨管理是維持企業生產和銷售均衡的需要,充足的存貨一方面可以節約采購費用,另一方面又有利於生產正常進行,實際上即使市場供應充足的時候,存貨也會出現問題,如供應距離、運輸過程出現的種種故障等,因此企業需要通過一定的存貨來維持生產或銷售的均衡需要;其次,加強存貨管理是考慮采購成本的需要,批量采購相對於零星采購能節約更多的采購費用,但過多的存貨也會佔用較多的資金,增加倉儲成本和管理成本等,因此企業應通過加強存貨管理在二者之間取得一定的平衡。
二、我國中小企業存貨管理現存主要問題
第一,企業對存貨管理的重視不夠,存貨管理制度不完善。中小企業大多會受到管理人員專業素質的制約,對存貨管理重視程度不高,僅是停留在保證正常生產和銷售的這一層面上,對企業的銷售數據和存貨歷史數據分析力度不夠,使得企業存貨成本長期處於失控狀態中。同時,大多數中小企業尚欠缺完善的存貨管理制度,或是即使有相關制度也缺乏嚴格的考核和監督,存貨管理制度執行流於形式。實際操作中,中小企業驗收人和采購人往往為同一人,增加了存貨流轉過程徇私舞弊的風險,且企業對於單價小、規格多的存貨沒有形成統一的分類管理辦法,不利於企業做到全方面的控制。
第二,存貨管理信息化程度較低。很多中小企業對存貨的管理還處於初級模式,尚未實現信息化管理,大多採用手工操作或計算機管理並行的方式來管理存貨,這種情況下容易導致企業存貨核算不準確,賬實不符,無法對存貨進行及時監控,偷盜現象時有發生,不利於企業的內部管理。雖然也有部分中小企業建立了健全的存貨管理信息系統,但這樣的系統穩定性、准確性較差,除記載存貨的收、發、存的數量外,其他方面數據很不健全,與供應商也不能聯網,存貨信息無法第一時間得到反饋,常會誤導企業采購行為,存貨實物管理混亂、存貨信息不準,造成存貨脫銷或積壓,無法實現為企業資金管理提供決策依據。
第三,缺乏科學的存貨采購計劃。科學的存貨采購計劃是中小企業存貨管理的薄弱環節。目前,我國大多數中小企業往往把存貨管理的重點放在原材料采購和成品的銷售上,過於忽視存貨成本和存貨資金佔用情況,缺乏科學的采購計劃和銷售預測,僅憑感覺進行采購,不能按物資實際需求量提出采購申請,無法對存貨進行定性和定量的控制,沒有形成采購存貨的限額責任管理,容易導致供不應求或供過於求等不合理狀況,嚴重影響企業的正常經營活動。另一方面,由於沒有科學的采購計劃,中小企業采購中常出現頻繁采購現象,大大增加了企業的采購成本。
第四,存貨管理內部控制問題突出。一是中小企業在職能分工上不盡合理,管理人員往往身兼數職,人材料采購、驗收和產品銷售等可能均由同一人來完成,容易出現質次價高、缺斤短兩、企業資產流失等現象;二是中小企業人員監管制度不規范,例如一些中小企業僅憑采購人員提供的發票入賬、報銷,容易滋生采購人員與供應商之間相勾結的行為;三是大多數中小企業均缺乏內部審計機構,或是相關職能被弱化了,企業既無規范的存貨管理規則,也沒有相應的存貨盤點制度,忽視對存貨的倉儲、保管、領用、報廢等方面的控制。
三、加強中小企業存貨管理的建議和對策
第一, 完善企業存貨管理制度。首先,加強存貨采購控制,。由采購部門編制采購計劃經審批後再進行采購,加強與供應商的談判力度,確保采購合同按時、按質、按量完成,在驗收方面,相關部門應就運單、發票、合同進行嚴格驗收,建立保管責任制,保證存貨安全,在資金支付結算上財會部門應就合同、驗收單、入庫單、付款通知等進行審核,確認無誤後再付款。其次,完善領用管理制度,建立規范的出庫制度,做到只要存貨發出,就要嚴格填制存貨出庫憑證,建立存貨定期盤點清查制度,嚴格按照存貨盤點單要求記錄當前存貨情況,確保賬實相符。再次,完善銷售管理制度,規范銷售發出存貨提取程序,要求見單發貨,並要求財務人員通過存貨周轉天數、存貨周轉率等指標加強存貨管理。
第二,加強存貨管理信息化建設。隨著經濟信息化的推進,中小企業應充分重視存貨的信息化管理,建立適合自身發展的信息化管理系統,健全實物流轉信息與賬務處理信息及時化通道,便於相關人員可以實時、動態了解存貨信息,以實現企業存貨資金的有效管理,保持企業強大的競爭力。例如,中小企業可以使用ERP信息管理系統,它能夠將企業物資資源、資金資源和信息資源有效整合在一起,同時通過ERP系統企業可以實現存貨信息資源在各部門或是部門與供應商之間的共享,有利於企業對資金、貨物、人員和信息的全方位監控,有效阻止企業各部門各自為政、信息阻塞、賬實不符等問題的發生。
第三,加強存貨采購管理,完善采購計劃。一是規范采購行為,對采購貨物的品質、價格、數量等進行動態監控,增加采購透明度,要求做到“貨比三家”,選擇信譽好、價格低、質量優的供貨企業;二是運用科學方法計算存貨成本,目前我國中小企業大多採用移動加權平均法作為存貨計價的方法,但這種方法工作繁瑣且工作量大,需要有專人負責,隨著電算化系統在中小企業的推廣,建議使用個別計價法進行存貨計價,這種方法確定的存貨成本最為准確;三是提高采購計劃人員綜合素質,采購計劃員要有較高的業務素質,對生產工藝流程及設備運行情況要有充分的了解,掌握設備維修、備件消耗情況及生產耗用材料情況,進而做出科學合理的存貨采購計劃。
第四,採用科學的存貨管理模式,控制最佳庫存量。傳統的庫存管理方法包括:ABC分類法,依據存貨成本價值和用量大小、重要程度對存貨進行管理;定量訂貨模型,指當庫存量下降到預定最佳庫存數量(訂貨點)時便按規定數量進行訂貨補充;定期訂貨模型則是按預先確定的訂貨間隔期間進行訂貨補充庫存,每次訂貨數量不同,其需要連續盤點庫存以便達到訂貨點就發出訂單。另外,中小企業也可以通過加強供應鏈管理來實現最佳庫存量,供應鏈庫存管理是將傳統供應模式產生訂單進行補貨改變成以實際或預測的消費需求進行補貨,是在企業與供應商相互合作的基礎上,基於雙方成本最優原則,由供應商管理庫存,確定庫存水平和補給的策略,控制最佳庫存量,其主要步驟包括選擇合適的供應商、建立與供應商及時的信息共享機制以及進行JIT操作。
第五,加強存貨內部控制。中小企業存貨內部控制應做到以下幾點:一是中小企業應根據自身生產經營特點,建立與供應、銷售方的信息共享機制,嚴格采購和銷售制度,有效發揮存貨內部控制制度;二是建立存貨業務崗位責任制,要求相容職能相分離,如存貨請購與審批、采購的驗收與付款等,確保各崗位之間能夠相互制約和監督;三是建立一套科學合理的授權審批制度,規范存貨管理的授權審批方式、程序和許可權,嚴禁未經授權人員辦理存貨業務;四是完善存貨業務流程式控制制,包括存貨的取得、驗收、入庫、倉儲、保管、領用、處置等環節的工作控制,確保存貨管理內部控制制度能夠在企業存貨管理的全方位嚴格執行,並進行合理的獎懲。
總之,一直以來存貨問題始終困擾著中小企業的生產經營管理活動,影響中小企業經濟效益的實現,因此重視存貨管理,改善存貨管理,對於提高中小企業的經營成果,保障中小企業健康、穩定發展具有十分重要的作用。
參考文獻:
1.周培行.探析企業存貨管理存在的問題及對策[J].現代商業,2011(9).
2.王娟.也談中小企業存貨管理策略問題[J].經濟師,2012(6).
3.徐文靜.淺析中小企業存貨管理問題[J].企業導報,2011(1).