1

tbl_Customersと の2 つの列CustomerIDを持つテーブルがありますCustomerGroupIDCustomerIDID列です。新しいレコードが追加されると、パラメーター値が指定されていない限り、値CustomerGroupIDが自動的にデフォルト値になるようにしたいと思います。その場合は、パラメーター値に設定する必要があります。CustomerID

現時点でのストアドプロシージャは次のとおりです(CustomerGroupID列は含まれません)

SQL Server の初心者からの助けに感謝します。

ジム

ALTER PROCEDURE [dbo].[sp_AddCustomerUpdateCar] 
            @CarReg varchar(10),
            @CustTitle varchar(8),  
            @CustFName   varchar(15),   
            @CustSName varchar(20),
            @CustCompany varchar(30),   
            @CustTel1   varchar(15),    
            @CustTel2   varchar(15),    
            @CustAddress1 varchar(50),  
            @CustAddress2 varchar(50),  
            @CustAddress3 varchar(50),  
            @CustAddress4 varchar(50),  
            @CustPostCode varchar(9),   
            @CustEmail varchar(50),
            @CustCredit smallmoney,
            @CustCreditExpires datetime,
            @CustAccountID int,
            @CustSource varchar(50)

AS

INSERT INTO tbl_Customers 
            (CustTitle,
            CustFName,
            CustSName,
            CustCompany,
            CustTel1,
            CustTel2,
            CustAddress1,
            CustAddress2,
            CustAddress3,
            CustAddress4,
            CustPostCode,
            CustEmail,
            CustCredit,
            CustCreditExpires,
            CustAccountID,
            CustSource)

VALUES      (@CustTitle,
        @CustFName,
        @CustSName,
        @CustCompany,
        @CustTel1,
        @CustTel2,
        @CustAddress1,
        @CustAddress2,
        @CustAddress3,
        @CustAddress4,
        @CustPostCode,
        @CustEmail,
        @CustCredit,
        @CustCreditExpires,
        @CustAccountID,
        @CustSource)
4

3 に答える 3

1

挿入後にデフォルトを設定するトリガーを作成できます。

create trigger defaultGroupId on t after insert as
update t set groupID = id where id in (select id from inserted);

これが実際の動作を示すフィドルです: http://sqlfiddle.com/#!3/4e5b2/1

于 2013-07-26T00:41:08.197 に答える
0

ジョン、ありがとう。

トリガーをもう少しブラッシュアップする必要があると思います!

それまでの間、sp の最後に UPDATE を追加して、自分の問題を解決することができました。同様の問題を抱えている他の人のために、コードは次のとおりです。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go




ALTER PROCEDURE [dbo].[sp_AddCustomerUpdateCar] @CarReg varchar(10),
                                                @CustTitle  varchar(8), 
                                                @CustFName  varchar(15),    
                                                @CustSName  varchar(20),
                                                @CustCompany    varchar(30),    
                                                @CustTel1   varchar(15),    
                                                @CustTel2   varchar(15),    
                                                @CustAddress1   varchar(50),    
                                                @CustAddress2   varchar(50),    
                                                @CustAddress3   varchar(50),    
                                                @CustAddress4   varchar(50),    
                                                @CustPostCode   varchar(9), 
                                                @CustEmail  varchar(50),
                                                @CustCredit smallmoney,
                                                @CustCreditExpires datetime,
                                                @CustAccountID  int,
                                                @CustSource varchar(50),
                                                @CustomerGroupID int

AS

BEGIN TRAN

INSERT INTO tbl_Customers (CustTitle,
                            CustFName,
                            CustSName,
                            CustCompany,
                            CustTel1,
                            CustTel2,
                            CustAddress1,
                            CustAddress2,
                            CustAddress3,
                            CustAddress4,
                            CustPostCode,
                            CustEmail,
                            CustCredit,
                            CustCreditExpires,
                            CustAccountID,
                            CustSource)
VALUES (@CustTitle,
        @CustFName,
        @CustSName,
        @CustCompany,
        @CustTel1,
        @CustTel2,
        @CustAddress1,
        @CustAddress2,
        @CustAddress3,
        @CustAddress4,
        @CustPostCode,
        @CustEmail,
        @CustCredit,
        @CustCreditExpires,
        @CustAccountID,
        @CustSource)

IF @customerGroupID = 0 
BEGIN
    UPDATE tbl_Customers
    SET CustomerGroupID = SCOPE_IDENTITY()
    WHERE CustomerID = SCOPE_IDENTITY()
END

COMMIT TRAN
于 2013-07-29T15:07:01.833 に答える
0

有用な@John Tsendの回答に対する小さな改善:デフォルト値の場合、INSERT時に別の値で設定でき、その値は上書きされるべきではありません。
したがって、トリガーを次のように変更します。

create trigger defaultGroupId on t after insert as
update t set groupID = id where id in 
      (select id from inserted where groupId is null);
于 2015-01-28T16:23:27.940 に答える