0
我們使用基本上通過SQL表爲對象設置權限的產品。我正在嘗試創建一個存儲過程,它基本上將一個用戶的權限設置爲與另一個用戶相同。這是我到目前爲止:嘗試創建將構建多個條目的存儲過程
CREATE PROCEDURE SETPRODUCTS
@sourceCC BIGINT,
@targetCC BIGINT
BEGIN
DECLARE @SQL varchar(5000)
DECLARE @Sequence_Id varchar(50)
SET @sequence_id = 0
BEGIN TRANSACTION
DELETE FROM TCC WHERE CC_Id = @targetCC
DECLARE cursorCurrent CURSOR FOR
SELECT MAX(TCC_Id) + 1
FROM TCC WITH (tablockx holdlock)
OPEN cursorCurrent
FETCH NEXT FROM cursorCurrent INTO @sequence_id
IF (@sequence_id IS NULL)
SET @sequence_id = 1
INSERT INTO TCC (TCC_Id, T_Id, CCC_Id)
VALUES (@sequence_id,
(SELECT T_Id FROM TCC WHERE CC_Id = @sourceCC), @targetCC)
CLOSE cursorCurrent
DEALLOCATE cursorCurrent
COMMIT TRANSACTION
END
我得到的錯誤是,我的子查詢有多個值,這是真的。我想從該子查詢中獲取每個條目並使用它將新行插入到我的數據庫中。
任何幫助將不勝感激!
你爲什麼要建立一個光標,然後只使用第一行???在這裏你的TCC_Id要非常小心。使用MAX + 1很容易出現很多錯誤。即使使用tablockx掛鎖,你仍然可以得到一些錯誤。我寧願在這裏使用一個身份,因爲它已經處理了所有的併發問題,這些問題對你自己來說是非常具有挑戰性的。 –
我將如何去使用身份? –
您將在TCC中有一列是標識列。然後整個過程成爲一個沒有額外代碼的單一插入語句。 https://msdn.microsoft.com/en-us/library/ms186775.aspx –