2012-01-18 9 views
1

SQL Server 2008でストアドプロシージャのパラメータの値を制限する方法はありますか?それはvarcharです。例えば。私はそれが「生産」、「開発」、または「品質保証」だけであることを望みます。私は誰かが 'Prod'、 'Dev'、 'UAT'など何かを渡すとエラーになることを願っています。SQL Serverでストアドプロシージャのパラメータの値を制限する

+0

ストアドプロシージャ自体に検証ロジックを追加しようとしましたか?例えば。パラメータの値を確認し、条件に合わない場合はRAISE ERRORを使用します。 – RobJohnson

答えて

5
CREATE PROC SomeProc 
    @par VARCHAR(50) 
AS 
BEGIN 

    IF @par NOT IN ('Production', 'Development', 'QA') 
    RAISERROR(N'Your Message',16,1) 

    -- MORE CODE HERE 

END 

あなたは可能性がある限り、有効な値をルックアップするために、テーブルを使用してソリューションを提供します。

0

IFブロックとRAISEERRORキーワードの組み合わせを使用すると、必要なものを達成できるはずです。

ただし、この制限はアプリケーションとストアドプロシージャのどちらにも属しているようです。

+0

最後の行に同意しないでください。プロシージャが特定のリストからパラメータを指定して呼び出されることが期待される場合、デフォルトを想定していたり​​、静かに失敗したりするのではなく、何らかのナンセンスが渡された場合にエラーを発生させることは完全に合理的です。 –

+0

私はそれが公正な点だと思っています。私はSPロジックをCRUDだけに制限し、アプリケーションで入力の検証を処理させます。結局のところ、アプリケーションはソース管理、バージョン管理、コードレビューなどの影響を受け、SPロジックはしばしば気付かずにデバッグが困難になることがあります。 – RobJohnson

+0

@MartinSmith - ストアドプロシージャがコマンドラインや管理者がManagement Studioのようなものを使用して実行されている場合を除き、このロジックがストアドプロシージャに必要な理由はわかりません。あなたが記述したものは、ビジネスロジックを取り除くことができるアプリケーションでは非常に簡単に実装できます。 –

0

私がこれを行うと考えることができる唯一の方法は、手動で値を自分で確認することです。大まかな例として、

CREATE PROCEDURE [dbo].[MyProcedure] 
    @value varchar(32) 
AS 
BEGIN 

    declare @isAllowed bit = 0 
    if @value in ('Hello', 'World') 
     set @isAllowed = 1 

    if @isAllowed begin 
     -- Do work here 
    end 
    else begin 
     -- Send error here 
    end 

END 
関連する問題