我需要一點幫助。下面的存儲過程似乎沒有以往任何時候都匹配退出的唯一標識符存儲過程返回不正確的ID引導
ALTER PROCEDURE [dbo].[spInsertUpdateThisStuff]
@Id uniqueidentifier OUTPUT,
@Content nvarchar(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tAudit table (id uniqueidentifier)
IF EXISTS(SELECT * FROM [dbo].[myData] WHERE [ID] = @Id)
-- UPDATE
BEGIN
UPDATE [dbo].[myData]
SET [ID] = @ID,
[Content] = @Content
OUTPUT inserted.[ID] INTO @tAudit
WHERE [ID] = @Id
SELECT id FROM @tAudit
END
ELSE
BEGIN
-- INSERT
SET @ID = NEWID()
INSERT INTO [dbo].CBData ([ID], [Content])
OUTPUT inserted.[ID] INTO @tAudit
VALUES(@Id, @Content)
SELECT id FROM @tAudit
END;
SET @ID = (SELECT id FROM @tAudit);
END
的C#
cmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = (currentRecord.ID == null) ? Guid.Empty : currentRecord.ID;
cmd.Parameters["@ID"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
currentRecord.ID = Guid.Parse(cmd.Parameters["@ID"].Value.ToString());
看來第一個IF語句不以往任何時候都成爲真正的,但如果測試(SELECT * FROM [dbo].[myData] WHERE [ID] = @Id
)用它匹配的UID會返回數據。
你怎麼知道它永遠不會返回TRUE;?它總是最終插入一個新的記錄? –
是的,這是發生了什麼事。 – rdm