У меня есть хранимая процедура T-SQL, которая вставляет в шесть разных таблиц в одной базе данных.Сохраненные процедуры Вставка проблем
.: например
Declare @...variables name
declare @newid as int
declare @Identityid as int
set @newid = 0
set @Identityid = 0
begin try
begin transaction
INSERT INTO dbo.TABLE1 (col1, column2)
VALUES (col1.values, col2.values)
SET @newid = @@IDENTITY
INSERT INTO dbo.TABLE2 (Table2_id, col1, column2)
VALUES (@newid, col1.values, col2.values) !--it's taking the same ID)
INSERT INTO dbo.TABLE3 (Table3_id, col1, column2)
VALUES(@newid, col1.values, col2.values)
INSERT INTO dbo.TABLE4 (Table4_id, col1, column2)
VALUES(@newid, col1.values, col2.values)
INSERT INTO dbo.TABLE5 (col1, column2)
VALUES (col1.values, col2.values)
SET @Identityid = @@IDENTITY (!--this IdentityID will be same for
next table)
INSERT INTO dbo.TABLE6 (Table6_id, col1, column2)
VALUES (@Identityid, col1.values, col2.values)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
RAISERROR('ERROR',16,1)
ROLLBACK TRANSACTION
PRINT ERROR_MESSAGE()
END CATCH
END
Теперь я наткнулся ситуации, когда мне нужно вставить несколько записей в течение последних двух таблиц (Table5
и Table6
).
Я называю эту процедуру с веб-сервиса (VB.NET)
Теперь я спиннинг мои колеса, пытаясь понять, как я могу вставить несколько записей в течение последних двух таблиц. Как я могу это сделать?
ОТВЕТ:
табличные значения параметров. «Табличные параметры обеспечивают простой способ маршалировать несколько строк данных из клиентского приложения на SQL Server, не требуя многократных обходов или специальной серверной логики для обработки данных. Вы можете использовать табличные параметры для инкапсуляции строк данных в клиентском приложении и отправлять данные на сервер в одной параметризованной команде. Входящие строки данных сохраняются в переменной таблицы, которая затем может быть использована с помощью Transact-SQL «
для просмотра и выполнения шагов Таблично-оцененные параметры Click here
Не кричите на нас. – Siyual
Что именно вы спрашиваете здесь ...? – Siyual
Будьте осторожны. Вы используете @@ Identity для захвата вставленного значения идентификатора из инструкции insert. Это не всегда будет производить это. Вероятно, вы должны использовать SCOPE_IDENTITY(). http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/ –