2016-05-19 4 views
-3

У меня есть хранимая процедура 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

+1

Не кричите на нас. – Siyual

+0

Что именно вы спрашиваете здесь ...? – Siyual

+1

Будьте осторожны. Вы используете @@ 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/ –

ответ

0

Я получил ответ: Табличные параметры. «Табличные параметры обеспечивают простой способ маршалировать несколько строк данных из клиентского приложения на SQL Server, не требуя многократных обходов или специальной серверной логики для обработки данных. Вы можете использовать табличные параметры для инкапсуляции строк данные в клиентском приложении и отправлять данные на сервер в одной параметризованной команде. Входящие строки данных хранятся в переменной таблицы, которая затем может быть использована с помощью Transact-SQL «

для просмотра и выполнения действий от табличных значений Click here

1

Вы можете сделать это, добавив дополнительные инструкции вставки для двух последних таблиц в хранимой процедуре.

+0

Спасибо, вкладка Alleman, вы можете предоставить любой простой пример, я действительно буду признателен, если он есть. – abcool

+0

У вас уже есть код. Просто продолжайте повторять свои последние 3 заявления, пока не получите все необходимые вам вставки. –

0

Это может быть достигнуто следующим способом.

INSERT INTO dbo.TABLE5 (col1, столбец2) ЗНАЧЕНИЯ (col1.values, col2.values), (col1.values, col2.values),
(col1.values, col2.values)

+0

спасибо, но я не сильно кодирую эти значения, если так я мог бы сделать это. но здесь что-то другое. – abcool