としてストアドプロシージャを作成することは可能ですか
CREATE PROCEDURE Dummy
@ID INT NOT NULL
AS
BEGIN
END
なぜこのようなことができないのですか?
SprocとRAISERROR
でNULLかどうかを確認して、呼び出し元の場所に状態を報告できます。
CREATE proc dbo.CheckForNull @i int
as
begin
if @i is null
raiserror('The value for @i should not be null', 15, 1) -- with log
end
GO
次に電話してください:
exec dbo.CheckForNull @i = 1
または
exec dbo.CheckForNull @i = null
あなたのコードは正しく、賢明で、さらに良い習慣です。この種類の構文をサポートするSQL Server 2014を待つだけです。
結局のところ、コンパイル時にできるのに実行時にキャッチするのはなぜですか?
このMicrosoftドキュメント も参照し、そこでNatively Compiled
を検索してください。
Dkrezが言うように、null可能性はデータ型定義の一部とは見なされません。なぜだと思いますか。
このような構文が必要になる理由の1つは、C#データセットGUIウィザードでspを使用するときに、null制限がない場合、null許容パラメーターを持つ関数を作成するためです。 sp bodyのnullチェックはそれを助けません。
「この編集は投稿の本来の目的から逸脱しています。大幅な変更が必要な編集でも、投稿の所有者の目標を維持するよう努めるべきです。」という理由で、私は@Unsliced投稿を編集できないようです。
だから(@crokusekとみんなが興味を持っている)これは私の目的の解決策です:
SprocとRAISERROR
でNULLかどうかを確認して、呼び出し元の場所に状態を報告できます。
CREATE proc dbo.CheckForNull
@name sysname = 'parameter',
@value sql_variant
as
begin
if @value is null
raiserror('The value for %s should not be null', 16, 1, @name) -- with log
end
GO
次に電話してください:
exec dbo.CheckForNull @name 'whateverParamName', @value = 1
または
exec dbo.CheckForNull @value = null