Update or Insert (ХП)

alexeyvg
Дата: 15.01.2009 09:59:25
syslink
если я правильно понял, это подходит только для одиночных записей?

INSERT ...
SELECT ...
WHERE NOT EXISTS(...)
подойдёт для групповых операций.
Senya_L
Дата: 15.01.2009 10:25:13
TehnicSan
Как определить что данные уже существуют/отсутствуют.

Буду признателен если поможете примером.
Вообще-то говоря, о том, что данные существуют или не существуют должно знать клиентское приложение, имхо. Обычно делается так
CREATE PROC InsertOrUpdate
    @UID  INT OUTPUT,
    ......
AS
BEGIN
    SET NOCOUNT ON;
    IF @UID IS NULL BEGIN
        INSERT IBTO Tbl(...)
        .....
        SET @UID = IDENT_CURRENT('Tbl')
    END ELSE BEGIN
        UPDATE Tbl SET
            ...
        WHERE UID = @UID
        -- если данные были удалены за время редактирования - не надо "прятать" этот факт :)
        IF @@ROWCOUNT =0 RAISERROR('Запись была удалена',16,1)
    END
END
GO
Соответственно на клиенте при сохранении данных по новому объекту считывается значение UID, полученное от ХП.
Руки-крюки
Дата: 03.02.2011 15:38:39
А так сделать можно?
	DECLARE @isFound bit
        UPDATE Tab
	SET
		val1 = '',
		val2 = 0,
		@isFound = 1
	WHERE id = 5

	IF @isFound IS NULL
	BEGIN
		INSERT ...
	END
Руки-крюки
Дата: 03.02.2011 15:40:43
И как переменная содержит количество обновленных строк после выполнения Update?