1

プライマリ外部キー関係を持つ 2 つのテーブルがあります。外部キー関係のテーブルには、null にすることができる列がいくつかあります (fk 列ではありません) null 値を受け入れることができる列 (Path1、Path2、...Path5) を除くすべての入力値で次の sp を実行すると、コンパイラは、Path1、Path2...Path5 を null にすることはできないというエラーをスローします。

ALTER PROCEDURE [dbo].[Submit_Product]
    @SubjectId uniqueidentifier,
    -- ... other required parameters ...

    -- optional parameters:
    @Path1 nvarchar(75),
    @Path2 nvarchar(75),
    @Path3 nvarchar(75),
    @Path4 nvarchar(75),
    @Path5 nvarchar(75)
AS
...
4

2 に答える 2

4

エラーは、ストアド プロシージャのコンパイルではなく、アプリケーションから発生していると思いますか?

いずれにしても、次のようにストアド プロシージャにデフォルトを設定する必要があります。

ALTER PROCEDURE [dbo].[Submit_Product]  
    (  
    @SubjectId uniqueidentifier,  
    @City nvarchar(30),  
    @Area nvarchar(20),  
    @Description nvarchar(400),  
    @ContactNo nvarchar(15),  
    @UserId int,  
    /*Fk Table*/  
    @Path1 nvarchar(75) = null,  
    @Path2 nvarchar(75) = null,  
    @Path3 nvarchar(75) = null,  
    @Path4 nvarchar(75) = null,  
    @Path5 nvarchar(75) = null 
    )  
AS  

また、ベスト プラクティスとして、将来の下位互換性の落とし穴を回避するために、挿入ステートメントで列名を指定することをお勧めします...

INSERT INTO dbo.ImagePath (Id, Path1, Path2, Path3, Path4, Path5) 
VALUES (
  @SubjectId, 
  @Path1, 
  @Path2, 
  @Path3, 
  @Path4, 
  @Path5 
) 

このようにして、デフォルト値を持つ別の列を追加でき、既存のストアド プロシージャは影響を受けません。

于 2012-06-17T19:23:07.537 に答える
2

null 値を受け入れる必要がある値については、SP にデフォルト値を追加する必要があります。

例えば:

@test nvarchar(200) = NULL

他の値を指定しない場合は、null 値が挿入されます。

于 2012-06-17T19:06:53.457 に答える