2016-03-22 3 views
0

Моя процедура вставки работает нормально, как я хочу. Но обновление не работает с идентификатором области.Как написать процедуру обновления с идентификатором области

SET ANSI_NULLS ON 

ALTER PROCEDURE [dbo].[spr_unitCreation] 
(
    @Unit_Name VARCHAR(50) = NULL, 
    @Unit_Abbreviation VARCHAR(50) = NULL, 
    @Unit_type VARCHAR(50) = NULL, 
    @Decimal_Places VARCHAR(50) = NULL, 
    @Description VARCHAR(50) = NULL, 
    @Super_Unit VARCHAR(50) = NULL, 
    @Per_Unit VARCHAR(50) = NULL, 
    @unit_Id INT OUTPUT, 
    @abc VARCHAR(50) = NULL 
) 
AS 
BEGIN 
    IF @abc = 'update' BEGIN 

     SET NOCOUNT ON; 

     SELECT @unit_Id AS SCOPE_IDENTITY 

     UPDATE tbl_UnitCreation 
     SET Unit_Name = @Unit_Name, 
      Unit_Abbreviation = @Unit_Abbreviation, 
      Unit_type = @Unit_type, 
      Decimal_Places = @Decimal_Places, 
      Description = @Description, 
      Super_Unit = @Super_Unit, 
      Per_Unit = @Per_Unit 
     WHERE unit_Id = @unit_Id 
    END 

END 

SELECT * FROM tbl_UnitCreation 
+0

'обновление не работает с идентификатором объема 'Вы получаете сообщение об ошибке? –

+2

Общий сценарий - передать полученный после идентификатора вставки все остальные SP, такие как UPDATE/DELETE/SELECT. Есть два варианта: 1) вы контролируете весь сценарий и точно знаете, что update-SP появляется сразу после вставки-SP, чтобы вы могли (и на самом деле должны) передавать новый ID для обновления-SP 2), вы не контролируете сценарий и не можете убедитесь, что перед оператором вызова update-SP вставил строку в нужную таблицу, поэтому вы не можете использовать ID, полученный с помощью SCOPE_IDENTITY(), потому что вы не знаете, к какой таблице принадлежит этот идентификатор. –

+0

, если вы хотите обновить последнюю вставленную запись, тогда в этом случае используйте 'IDENT_CURRENT' –

ответ

0

SCOPE_IDENTITY возвращает последнее значение идентичности, вставленное в столбец идентификации. Вы не вставляете строку.

Чтобы обновить строку, вам нужно передать значение @unit_Id при выполнении [spr_unitCreation]. Также удалите из своего кода строку «SELECT @unit_Id AS SCOPE_IDENTITY».

Основываясь на комментариях, вы должны найти правильный идентификатор, выполнив поиск соответствующих сведений. Таким образом, вы можете получить id следующим образом:

SELECT @unit_Id = unit_Id 
FROM tbl_UnitCreation 
WHERE [email protected]_Name -- NB: Ensure this column contains your relevant details 
+0

, но я не могу передавать значение вручную все время. like @ unit_id = 2 –

+1

Как узнать, какую строку вы собираетесь обновлять? –

+0

ya это вопрос. он должен автоматически обновляться по идентификатору, когда мы выбираем релевантные данные. но с идентификатором области не принимает unit_id = @ unit_id –