T-SQL - В Single Stored процедуре нужно передать значение (результат) одного запроса в другой запрос в качестве входных данных - PullRequest
1 голос
/ 28 сентября 2010


У меня есть хранимая процедура, в которой я должен вставлять 3 строки в 3 разные таблицы одновременно, каждая строка в каждую из 3 таблиц.
В каждой таблице уникальный первичный ключ (rowid) будет генерироваться при вставке значения.
Теперь первичный ключ первых двух таблиц - это внешний ключ третьей таблицы, который, как вы все знаете, не должен быть нулевым.

Здесь, в моем SP, вставка значения и генерация RowID (PrimaryKey) выполнены успешно.
Теперь мне нужно передать два первичных ключа (Rowids) как значения / параметры (foreignkeys) в третью таблицу, которая возвращает ноль.

Вот мой ИП: -

    (1st Table)    
   INSERT INTO [kk_admin].[FA_Master](FA_Name,FA_CSession,FA_MSession) Values
             (@FA_Name,@Session_Id,@Session_Id)

   SELECT @**FA_ID=FA_ID** FROM [kk_admin].[FA_Master] where FA_Name=@FA_Name  

    (2nd Table)  
   INSERT INTO [kk_admin].[Dept_Master](Dept_Name,Dept_CSession,Dept_MSession) Values  
   (@Dept_Name,@Session_Id,@Session_Id)  

   SELECT @**Dept_id=Dept_id** from [kk_admin].[Dept_Master] where Dept_Name=@Dept_Name   

   (3rd Table)
   INSERT INTO [kk_admin].[Category_Master] (**FA_Id**,**Dept_Id**,Category_Name,Category_CSession,Category_MSession) Values    (@**FA_ID**,@**Dept_Id**,@Category_Name,@Session_Id,@Session_Id)  

Надеюсь, все поняли, что я объяснил.

Плз Помогите мне,
Мне не хватает времени. Пожалуйста, помогите мне. Заранее спасибо,
Brightsy

1 Ответ

0 голосов
/ 28 сентября 2010

Вы можете использовать предложение OUTPUT (при условии, что вы используете SQL Server 2005) для захвата первичного ключа для двух строк, которые вы вставляете в первые два запроса.Вы можете записать значения во временную таблицу.[Ранее я писал, что вы можете использовать обычную переменную, но это не поддерживается.] Пример кода:

CREATE TABLE #FA_Master_ID ( ID int );
CREATE TABLE #Dept_Master_ID ( ID int );

INSERT kk_admin.FA_Master ( FA_Name, FA_CSession, FA_MSession )
OUTPUT INSERTED.ID INTO #FA_Master_ID
VALUES ( @FA_Name, @Session_Id, @Session_Id );

INSERT kk_admin.Dept_Master ( Dept_Name, Dept_CSession, Dept_MSession )
OUTPUT INSERTED.ID INTO #Dept_Master_ID
VALUES ( @Dept_Name, @Session_Id, @Session_Id );

INSERT kk_admin.Category_Master ( **FA_Id**, **Dept_Id**, Category_Name, Category_CSession, Category_MSession )
SELECT  **FA_Id** = ( SELECT TOP 1 ID FROM #FA_Master_ID ),
        **Dept_Id** = ( SELECT TOP 1 ID FROM #Dept_Master_ID ),
        Category_Name = @Category_Name,
        Category_CSession = @Session_Id,
        Category_MSession = @Session_Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...