我想在插入選擇語句 的末尾調用存儲過程,但在事務的提交或回滾之前,我想存儲proc是包含插入選擇的事務的一部分。如果我希望新代碼成爲包含事務的一部分,是否只寫動態SQL是唯一的選擇?在包含動態sql的事務中嵌入對存儲過程的調用
字符串附加數量實際上相當大(數千),但我 只共享代碼的小片段,以突出顯示 的概念,並顯示我想要做什麼。
sqlStr.Append("BEGIN TRANSACTION; ")
sqlStr.Append("INSERT INTO table_chg (Column1, Column2) ")
sqlStr.Append("SELECT r.Column8 , r.Column9 ")
sqlStr.Append("FROM v_table r, table1 r ")
sqlStr.Append("WHERE r.columnName1 = '{1}' ")
sqlStr.Append(" AND r.coulumnName2 = '{2}'; ")
sqlStr.Append(" ")
/** ADD STORED PROCEDURE HERE */
EXEC sp_storedProc '{1}' **THIS DOES NOT WORK. BUT {1} does resolve to the correct variable that I need. Also the stored procedure works standalone and the VB.Net code does try to reference the stored proc because if i give the stored proc an incorrect name i get an error back which says stored procedure not found**
sqlStr.Append("IF @@ERROR <> 0 ")
sqlStr.Append(" ROLLBACK TRANSACTION ")
sqlStr.Append("ELSE ")
sqlStr.Append(" COMMIT TRANSACTION; ")
strError = DatabaseClass.ExecuteNonQueryReturnError
(String.Format(sqlStr.ToString(), parameter1, parameter2))
關於可行性的任何想法? – User1
我假定這是您爲生成示例所做的簡化的副產品,但是您爲'v_table'和'table1'使用了別名'r'。這會導致錯誤。 –
是的,這是正確的。這實際上是一個巨大的SQL語句,我砍下了.....好的觀察... – User1