これに少し助けが必要です。ストアドプロシージャは、以下のこれまでの一意の識別子を出一致していないよう不正なID guidを返すストアドプロシージャ
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());
それは声明が今まで真ならない場合最初のようだが、もしでテスト(SELECT * FROM [dbo].[myData] WHERE [ID] = @Id
)一致するUIDはデータで返されます。
のですか?常に新しいレコードを挿入することになるのでしょうか? –
はい、どうなりますか。 – rdm