Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как очистить таблицу заданную переменной???  [new]
Teslenko Sergey
Member

Откуда:
Сообщений: 182
Подскажите пожалуйста, как можно очистить массив таким образом, чтобы при новом заполнении идентификатор начинался с единицы.

вот таблица в виде переменной:
@Table_Basic_string table (
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Using] [bigint] DEFAULT (0) NOT NULL,
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
[Basic_string] [varchar](300) DEFAULT '' NOT NULL,
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
[Tex_cod] [bigint] DEFAULT (0) NOT NULL,);

Пробовал так
DELETE @Table_Basic_string; - таблица очищается но IDENTITY(1,1) не сбрасывается и в последующем заполнении начинает с последнего номера + 1 старого массива.

Truncate table - не работает, что и не мудрено.

Заранее спасибо. :-)
3 апр 12, 11:51    [12355792]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
https://www.sql.ru/faq/faq_topic.aspx?fid=104
3 апр 12, 11:51    [12355800]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Teslenko Sergey
Member

Откуда:
Сообщений: 182
Knyazev Alexey,

А там ничего нет по этому поводу. Или я не нашёл?
3 апр 12, 11:55    [12355830]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Teslenko Sergey,

Тоже циклы с курсорами любите?

https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=927323&hl=
3 апр 12, 12:05    [12355909]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Teslenko Sergey
Member

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

Ну и опять не понятно, тут обычным счётчиком никто не пользуется, а мне его надо обнулять. Вот и всё.
3 апр 12, 12:11    [12355955]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Teslenko Sergey
Подскажите пожалуйста, как можно очистить массив таким образом, чтобы при новом заполнении идентификатор начинался с единицы.
Нельзя. Придётся не использовать identity или использовать временную таблицу вместо переменной (что в вашем случае наверняка будет эффективнее).
3 апр 12, 12:18    [12356040]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Teslenko Sergey
чтобы при новом заполнении идентификатор начинался с
Идентификатором обычно называют ПК, а у вас просто поле целого типа с инкрементом.
3 апр 12, 12:20    [12356057]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Teslenko Sergey
Member

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

Ну или писать заполнение массива вручную а не через Insert ........ Select distinct ..........

Может всё-таки есть какой-то способ? Типа аля волшебная функция инструкции DELETE.
3 апр 12, 12:36    [12356230]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Teslenko Sergey
alexeyvg,

Ну или писать заполнение массива вручную а не через Insert ........ Select distinct ..........
Не понял, в каком смысле? Что такое "вручную" и как вы вставляете данные сейчас, без Insert ... Select? И "автоматичски" - это в таблицу переменную, а во временную таблицу уже "вручную"?
Teslenko Sergey
Может всё-таки есть какой-то способ? Типа аля волшебная функция инструкции DELETE.
Нету, увы.
3 апр 12, 14:35    [12357423]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
aleks2
Guest
Teslenko Sergey
alexeyvg,

Ну или писать заполнение массива вручную а не через Insert ........ Select distinct ..........

Может всё-таки есть какой-то способ? Типа аля волшебная функция инструкции DELETE.


Ну, если вам припекло с единицы - выкиньте IDENTITY - пользуйте для заполнения ROW_NUMBER()
3 апр 12, 16:20    [12358591]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Alexander Karavaev
Member

Откуда: Москва
Сообщений: 40
Teslenko Sergey,

если просто для таблицы, то DBCC CHECKIDENT("Table",reseed,1); но для переменной это, к сожалению, не работает :(

Зато в SQL Server 2012 можно так:
create sequence seq as int start with 1;

declare @Table table
(
	id int
);

insert into @Table
values(next value for seq);

delete from @Table;

alter sequence seq
RESTART WITH 1;

insert into @Table
values(next value for seq);

select * from @Table;

drop sequence seq;
3 апр 12, 16:35    [12358777]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Alexander Karavaev
Зато в SQL Server 2012 можно так:
Как я понимаю, это то же самое, что заменить таблицу-переменную на постоянную таблицу? :-)

Зачем так делать, если есть несколько правильных им простых способов?
3 апр 12, 16:55    [12359022]     Ответить | Цитировать Сообщить модератору
 Re: Как очистить таблицу заданную переменной???  [new]
Alexander Karavaev
Member

Откуда: Москва
Сообщений: 40
alexeyvg
Как я понимаю, это то же самое, что заменить таблицу-переменную на постоянную таблицу? :-)

Ну, вообщем и целом да, хотя есть подозрение, что возможно (чисто теоретически), что overhead в случае таблицы-переменной + постоянный sequence будет меньше...

alexeyvg
Зачем так делать, если есть несколько правильных им простых способов?

А какой уж там способ правильный надо уже всё-таки смотреть на конкретный case. Я просто предложил как вариант для полноты картины :)
3 апр 12, 17:05    [12359135]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить