国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據庫 > SQL Server > 正文

EXEC(EXECUTE)函數(shù)訪問INSERTED或DELETED的內部臨時觸發(fā)表

2020-07-25 13:17:17
字體:
來源:轉載
供稿:網友
剛開始時,這個表的字段很少(10個以內),前開發(fā)者把這個表的所有存儲過程與觸發(fā)器以及表函數(shù)全是寫死了。用戶每添加一些字段,都需要手動去更改這些存儲過程與觸發(fā)器以及表函數(shù)。現(xiàn)在這個表的字段已經高達300個以上,有可能還會增長,因此Insus.NET的業(yè)務就是把這此靜態(tài)全改寫為動態(tài)處理。

然而有一個問題一直困攏至昨天,昨天是星期天本應是休息的,但是這個問題沒有解決,因此這天算不上休息了。

問題就是改寫表的觸發(fā)器,涉及到EXEC(EXECUTE)函數(shù)訪問INSERTED或DELETED的內部臨時觸發(fā)表,如:
復制代碼 代碼如下:

EXECUTE('SELECT '+ @N +' = ISNULL(['+ @I +'],0) FROM inserted')


當你嘗試執(zhí)行上面的SQL語句,會得到一個異常提示:invalid object name 'inserted'。我們無法顯示訪問INSERTED或DELETED的內部臨時觸發(fā)表。

由于INSERTED或是DELETED表是動態(tài)駐留在內存中,而不是存儲在數(shù)據庫中,它不是顯式的。觸發(fā)器的執(zhí)行是在導致觸發(fā)器被觸發(fā)的執(zhí)行計劃中。當我們使用EXEC(EXECUTE)或sp_executesql執(zhí)行動態(tài)生成的SQL語句時,它卻是另外一個單獨的執(zhí)行計劃。兩者之間的資源無法相互訪問,再加上計劃執(zhí)行完畢,內存也隨之釋放資源了。

但是問題還是需要解決,Insus.NET想起的還是臨時表??梢园袸NSERTED或DELETED表中的數(shù)據,首先轉換入臨時表了。這樣子,我們就可以對臨時表的數(shù)據進行處理了。

復制代碼 代碼如下:

SELECT * INTO #inserted FROM INSERTED
SELeCT * INTO #deleted FROM DELETED



實現(xiàn)代碼:

復制代碼 代碼如下:

DECLARE @F NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX),@I) --@I動態(tài)字段
EXECUTE ('SELECT ['+ @F +'] FROM #deleted)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄂温| 光泽县| 红原县| 天峻县| 奉新县| 苍山县| 商都县| 裕民县| 宿迁市| 丽江市| 晋城| 衡阳县| 日土县| 霍林郭勒市| 永定县| 阜宁县| 丰都县| 武鸣县| 胶南市| 虎林市| 且末县| 托里县| 桦川县| 东明县| 福安市| 淄博市| 兴仁县| 固安县| 平乐县| 特克斯县| 全南县| 保康县| 永仁县| 彭阳县| 贺兰县| 洮南市| 湄潭县| 乌兰察布市| 汽车| 克拉玛依市| 奈曼旗|