Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SCOPE_IDENTITY() возвращает NULL  [new]
dmolchanov
Member

Откуда:
Сообщений: 16
Добрый день!
Есть хранимая процедура
USE [base]
GO
/****** Object:  StoredProcedure [dbo].[ibt_CreateAccount]    Script Date: 09/11/2013 16:35:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[ibt_CreateAccount] (
	@INN varchar(12),
	@KPP varchar(9),
	@EnterpriseTypeID int,
	@FullName varchar(250),
	@ShortName varchar(250)
)
AS

DECLARE 
	@AccountID UniqueIdentifier

SET @AccountID = (SELECT Top 1 ID FROM [tbl_Account] WHERE INN=@INN AND KPP=@KPP)

IF (@AccountID is null)--Если Контрагент не найден
BEGIN
	

INSERT	INTO [dbo].[tbl_Account]
           ([ID]
           ,[Name]
           ,[OfficialAccountName]
           ,[ShortName]
           ,[INN]
           ,[KPP]
           ,[EnterpriseTypeID]
		   ,[AccountTypeID]		   
)
VALUES 
		   (newid()
		   ,@ShortName
		   ,@FullName
		   ,@ShortName
		   ,@INN
		   ,@KPP
		   ,(Select [ID]
		   FROM [dbo].[tbl_EnterpriseType]
		   WHERE [ID_SARP] = @EnterpriseTypeID)--Тип предприятия
		   ,'8B59A4EA-DEF2-422B-A8CF-BB0F6FEA4180' --Потенциальный		   			
)
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]

END 
ELSE--Если контрагент найден, то возвращаем ID найденного контрагента и код ответа 2
SELECT Top 1 ID, 2 AS [ResponseCode] FROM [tbl_Account] WHERE INN=@INN AND KPP=@KPP


Не понимаю почему SCOPE_IDENTITY() всегда возвращает NULL. Запись добавляется, но в [SCOPE_IDENTITY] отображается NULL.

Подскажите, пожалуйста, в чем может быть причина?
11 сен 13, 17:44    [14827797]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
Glory
Member

Откуда:
Сообщений: 104751
dmolchanov
Не понимаю почему SCOPE_IDENTITY() всегда возвращает NULL. Запись добавляется, но в [SCOPE_IDENTITY] отображается NULL.

Вы через SCOPE_IDENTITY хотите получить значение поля uniqueidentifier что ли ?
11 сен 13, 17:49    [14827819]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
dmolchanov
Подскажите, пожалуйста, в чем может быть причина?


В том, что Вы не прочитали в документации, для чего следует использовать SCOPE_IDENTITY().
11 сен 13, 17:49    [14827821]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
dmolchanov
Member

Откуда:
Сообщений: 16
Понятно. А как тогда его можно получить?
11 сен 13, 17:55    [14827853]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
INSERT INTO [dbo].[tbl_Account]
....
OUTPUT inserted.ID
VALUES 
...
11 сен 13, 17:56    [14827855]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
dmolchanov
Member

Откуда:
Сообщений: 16
Спасибо. А сейчас ошибку выдает:
Целевая таблица "dbo.tbl_Account" DML-инструкции не может иметь какие-либо активные триггеры, если инструкция содержит предложение OUTPUT без предложения INTO
11 сен 13, 18:01    [14827874]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
Гость333
Member

Откуда:
Сообщений: 3683
dmolchanov,

Используйте переменную, присваивайте ей значение NEWID().
11 сен 13, 18:02    [14827881]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
dmolchanov
Member

Откуда:
Сообщений: 16
Точно. Спасибо. Теперь получилось.
Большое спасибо.
11 сен 13, 18:05    [14827892]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() возвращает NULL  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Или помешайте результат OUTPUT в табличную переменную и делайте выборку уже из нее. Но, в данном случае - это будет оферхедом.
11 сен 13, 18:19    [14827941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить