Может случиться так, что это возможно только с помощью цикла, но кто знает.
Я нахожусь в среде программирования Java, использующей MS SQL Server, и я искал вокруг и, похоже, не могуНайдите хороший способ вставки записей, скажем, в таблицу истории транзакций, которую мы должны обновлять при каждом действии, выполняемом в других таблицах, после выполнения одной команды UPDATE для ОБНОВЛЕНИЯ многих записей.Для каждой обновленной записи UPDATE я также хотел бы сделать оператор вставки. По сути, это то, что мы в настоящее время делаем один за другим в коде, не использующем хранимую процедуру:
UPDATE table SET column1=null, column2=null, column3=0, column4=getDate() where column5=? and column6=1
...
//Insert transtable
createTransaction(tran, localConn);
...
INSERT INTO transtable ( a, b, c, d, e, f, g, h, i, " +
"j, k, l, m, n, o, p, q, r, s, " +
"t, u, v, w) " +
" VALUES ( ? ,? ,? ,? ,? ,? ,getDate() ,getDate() ,getDate() ,? ,? ,? ,? ,? ,? ,? ,getDate() ,getDate(),? ,? ,? ,?,? )
Что я хотел бы сделатьdo, это что-то вроде этого вместо UPDATE:
USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[setFlags]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE table1
SET column1 = '2', column2 = NULL
WHERE column1 = '1' or column1 = '2'
--FOR EACH UPDATED ROW IN THIS TABLE, CREATE A TRANSACTION IN TRANSTABLE
UPDATE table2
SET column1 = '0', column2 = NULL
WHERE column1 = '1'
--FOR EACH UPDATED ROW IN THIS TABLE, CREATE A TRANSACTION IN TRANSTABLE
UPDATE table3
SET column1 = '0', column2 = NULL
WHERE column1 = '1'
--FOR EACH UPDATED ROW IN THIS TABLE, CREATE A TRANSACTION IN TRANSTABLE
END
Однако для каждой обновленной записи (обычно около 100 записей будет обновлено с помощью этой утилиты), необходимо также выполнить около 100 INSERT.наша переносимая таблица, которая также будет содержать некоторые данные из обновляемых строк.
У кого-нибудь есть идеи?Ресурсы там?Так далее.?Я начинающий, так что иногда я просто не знаю, что искать.В последнее время я искал "для каждого UPDATE INSERT SQL" или "зацикливание вставки для каждого обновления"
I может нужно сделать WHILE TSQL, но если есть лучший способ (этотакже звучит ужасно неэффективно), было бы здорово узнать: http://msdn.microsoft.com/en-us/library/ms178642.aspx