Как я могу пересеять столбец идентификационных данных в табличной переменной T-SQL?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

33
задан Martin Smith 20 October 2013 в 18:58
поделиться

2 ответа

При использовании табличной переменной Вы не можете сделать этого. Если бы это была таблица, то Вы могли бы усечь его или использование 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

лучше, чтобы можно было сделать с табличной переменной.

34
ответ дан 27 November 2019 в 18:08
поделиться

Усечение таблицы выведет ВСЕ данные и сбросит семя идентификационных данных.

Иначе, можно использовать этот вызов для сброса идентификационных данных при сохранении любых из данных:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
34
ответ дан 27 November 2019 в 18:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: