如何更新存储过程中的群集标识字段?

时间:2013-09-17 05:42:50

标签: sql-server stored-procedures sql-update identity-column

您好,并提前致谢。我是初学者,并尝试通过存储过程更新多个表。除categoryDetail表外,所有表都在更新。这是一个复合主键,因此不想更改。我想我越来越近,但我需要帮助才能看到我出错的地方。

我无法发布表格的图像,争议的三个表格如下:

companyDetails

PK companyID

categoryDetails

PK catTypeId (this column won't update)
PK companyID
catKeywords (varchar)

categoryType

PK catTypeId
categoryType1 (varchar)

这是我的存储过程代码:

CREATE PROCEDURE [dbo].[UpdateProfile]
(
@UserId UniqueIdentifier,   
@custFname varchar(35),
@custLname varchar (35),
-- email from memberships table
@Email nvarchar(256) ,
@custMailList bit,
--Company Details table 
@cName varchar(45),
@cAddress varchar(100),
@cEmail varchar(50),
@keywords varchar(max),

@catType varchar(25), -- the new value of the catTypeId
@cDescribe varchar(150) 
)
AS
BEGIN TRANSACTION
DECLARE @companyID int
DECLARE @catTypeID int
DECLARE @oldCatTypeID int

UPDATE contactCustomer  
SET custFname = @custFname,
        custLname =  @custLname,
        custMailList =  @custMailList
WHERE
        contactCustomer.UserId = @UserId;   

UPDATE Memberships
SET Email = @Email
WHERE Memberships.UserId = @UserId;

SELECT 
        @companyID = companyID 
    FROM 
        contactCustomer 
    WHERE 
        contactCustomer.UserId = @UserId;

UPDATE companyDetails
SET companyName = @cName,
        companyAddress = @cAddress,
        companyDescription = @cDescribe,
        companyEmail = @cEmail
WHERE 
        companyDetails.companyID = @companyID

UPDATE categoryDetail
SET catKeywords = @keywords
WHERE categoryDetail.companyID = @companyID

    SET IDENTITY_INSERT categoryDetail  ON

    INSERT INTO categoryDetail (catTypeId, companyID, catKeywords)
       SELECT 
           @catType AS catTypeId, companyID, catKeywords
       FROM 
           categoryDetail
       WHERE 
           catTypeId = @oldCatTypeID

    IF @@ROWCOUNT = 1
       DELETE FROM categoryDetail
       WHERE catTypeId = @oldCatTypeID

    SET IDENTITY_INSERT categoryDetail OFF

    COMMIT TRANSACTION

0 个答案:

没有答案