#sql #sql-server #tsql
Вопрос:
У меня возникли проблемы с этим заявлением SQL, чтобы пойти и обновить некоторые записи, которые уже существуют. Для краткости я использую жестко закодированные значения.
Я хочу сделать следующее: Когда в таблице PersonXNotifyUser уже есть запись, в которой идентификатор пользователя и идентификатор уведомления совпадают, я хочу убедиться, что я обновил столбец IsDeleted до значения 0, а также обновил столбцы ModifiedBy и ModifiedDate соответственно. Вот что у меня есть до сих пор, что не выполняется, но я надеюсь, что кто-нибудь сможет мне помочь:
ОБНОВЛЕНИЕ: Поскольку в одном из ответов предполагалось, что необходим подзапрос, я добавил Тип таблицы и определение хранимой процедуры, в котором ожидается параметр с табличным значением
CREATE TYPE dbo.GuidIDList
AS TABLE
(
ID [UNIQUEIDENTIFIER]
);
CREATE PROCEDURE [dbo].[PersonXNotifyUser_InsertUpdate]
(
,@UserID [UNIQUEIDENTIFIER]
,@NotifyUserIDs AS dbo.GuidIDList READONLY
,@EditingUserID [UNIQUEIDENTIFIER]
)
AS
SET NOCOUNT ON
UPDATE PersonXNotifyUser
SET IsDeleted = 0, ModifiedBy = @EditingUserID, ModifyDate = GETUTCDATE()
FROM (
SELECT
test.NotifyUserID
FROM (
SELECT ID FROM @NotifyUserIDs
)
AS test (NotifyUserID)
WHERE EXISTS
(SELECT PersonXNotifyUserID
FROM PersonXNotifyUser pnu
WHERE pnu.UserID = @UserID AND pnu.NotifyUserID = test.NotifyUserID
)
)
Комментарии:
1. Что это
doesn't execute
значит ? Пожалуйста, укажите некоторые примеры данных и ожидаемый результат
Ответ №1:
Исходя из входных данных, приведенных в вопросе, не похоже, что для этого вам нужно объединение или подзапрос. Используйте простое обновление
DECLARE @UserID UNIQUEIDENTIFIER = '45D9F7E4-E111-4E62-8B1A-118F7C7FB6A1'
DECLARE @EditingUserID UNIQUEIDENTIFIER = 'CDFDBD9A-87FB-4F68-B695-F4A39424C207'
UPDATE PersonXNotifyUser
SET
IsDeleted = 0,
ModifiedBy = @EditingUserID,
ModifyDate = GETUTCDATE()
WHERE UserID = @UserID
AND EXISTS
(
SELECT
1
FROM @NotifyUserIDs
WHERE ID = PersonXNotifyUser.NotifyUserID
)
Комментарии:
1. Я обновил свой вопрос, чтобы внести больше ясности. Я отклонил это для краткости, но, похоже, это добавило путаницы.
2. @blgrnboy, Но я не вижу, чтобы табличная переменная NotifyUserIDs использовалась где-либо в вашем коде