現在、私は従来のアプリケーションで作業しており、それを使っていくつかの陰的なSQLを継承しています。このプロジェクトは決して生産に入ったことはありませんが、今のところそれが実現しています。初期テスト中にバグが見つかりました。アプリケーションは、多くの他のストアドプロシージャを呼び出し、カーソル、カーソルを使用してループを作成するストアドプロシージャなどを呼び出します。 FML。SQLユーザー定義関数とストアドプロシージャの分岐の比較
現在、アプリケーションの設計方法では、ストアドプロシージャを呼び出してから、新しいUIでUIをリロードします。もちろん、表示するデータはまだSQLサーバー側で処理されているため、表示されるとUIの結果は完全ではありません。この問題を解決するには、UIをロードする前に、スレッドを30秒間スリープさせました。これはひどいハックです、私は物事のSQL側でこれを正しく修正したいと思います。
私の質問は...分岐ストアドプロシージャを関数に変換する価値はありますか?これは、メインラインのストアドプロシージャを処理する前に戻り値を待つようにしますか?ここで
は、ストアドプロシージャです:
ALTER PROCEDURE [dbo].[ALLOCATE_BUDGET]
@budget_scenario_id uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @constraint_type varchar(25)
-- get project cache id and constraint type
SELECT @constraint_type = CONSTRAINT_TYPE
FROM BUDGET_SCENARIO WHERE BUDGET_SCENARIO_ID = @budget_scenario_id
-- constraint type is Region by Region
IF (@constraint_type = 'Region by Region')
EXEC BUDGET_ALLOCATE_SCENARIO_REGIONBYREGION @budget_scenario_id
-- constraint type is City Wide
IF (@constraint_type = 'City Wide')
EXEC BUDGET_ALLOCATE_SCENARIO_CITYWIDE @budget_scenario_id
-- constraint type is Do Nothing
IF (@constraint_type = 'Do Nothing')
EXEC BUDGET_ALLOCATE_SCENARIO_DONOTHING @budget_scenario_id
-- constraint type is Unconstrained
IF (@constraint_type = 'Unconstrained')
EXEC BUDGET_ALLOCATE_SCENARIO_UNCONSTRAINED @budget_scenario_id
--set budget scenario status to "Allocated", so reporting tabs in the application are populated
EXEC BUDGET_UPDATE_SCENARIO_STATUS @budget_scenario_id, 'Allocated'
END
呼び出す.NETアプリケーションのUIで不完全な結果セットを表示しないようにするには、分岐の呼び出しでカーソルが完了する前に、それはにこれらのストアドプロシージャを変換するworthwileです戻り値を持つ関数?これは、[ALLOCATED_BUDGET]ストアドプロシージャへのメインコールを完了する前にSQLを待機させるでしょうか?
- ストアドプロシージャの最後のSQLステートメントコールは、ステータスを「割り当て済み」に設定します。これは、前の呼び出しのカーソルが処理を終了する前に発生しています。これらの呼び出しを関数呼び出しにすると、ストアドプロシージャがフォーカスをアプリケーションに返す方法に影響しますか?
ご意見をいただければ幸いです。私はSQL関数に向いているが、100%確実ではないと感じている。
**追加情報:。
- 接続文字列の[非同期=真]コード用途を実行するコードを実行
- は、[SqlCommandオブジェクト] [は、ExecuteNonQuery]方法
実行コードが[SqlCommand]。[ExecuteNonQuery]メソッドを使用します – D3vtr0n