Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
При использовании табличной переменной Вы не можете сделать этого. Если бы это была таблица, то Вы могли бы усечь его или использование DBCC CHECKIDENT
. Но, если Вы имеете для использования табличной переменной, необходимо использовать что-то другое, чем столбец идентификационных данных. Или более точно используйте столбец идентификационных данных в своей табличной переменной, но произведите использование ROWNUMBER
:
DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES( 'one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
лучше, чтобы можно было сделать с табличной переменной.
Усечение таблицы выведет ВСЕ данные и сбросит семя идентификационных данных.
Иначе, можно использовать этот вызов для сброса идентификационных данных при сохранении любых из данных:
DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)