powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL
12 сообщений из 12, страница 1 из 1
Динамический SQL
    #32071396
Publik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Можно ли каким либо образом сделать следующее

select exec('delete from '+tablename+' where [id]='+[id]) from mytable

Т. е. выполнить удаление для каждой выбранной строки из таблице Mytable. Таблица Mytable содержит имя таблицы и идентификатор строки которую надо удалить.
...
Рейтинг: 0 / 0
Динамический SQL
    #32071407
Iam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Iam
Гость
DECLARE CUR CURSOR LOCAL FOR SELECT ID, TableName FROM MyTable

OPEN CUR
FETCH CUR_INS INTO @ID, @TableName
WHILE @@FETCH_STATUS >= 0 BEGIN
EXEC('DELETE ' + '@TableName WHERE ID = ' + @ID)
FETCH CUR_INS INTO @ID, @TableName
END
CLOSE CUR
DEALLOCATE CUR

Это упрощенный вариант. Дальше дело за тобой. Объедени все это в процедуру и дерзай...
...
Рейтинг: 0 / 0
Динамический SQL
    #32071410
Publik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь что не уточнил.
Мне нужно чтобы это работало без использования курсоров. Они медленно работают а записей может быть много.
...
Рейтинг: 0 / 0
Динамический SQL
    #32071411
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы хотите удалить то это делается просто,

Код: plaintext
exec('delete from '+tablename+' where [id]='+[id]) 

или вы хотите одновременно УДАЛЯТЬ и ВЫБИРАТЬ,
тогда сделайте это через временную таблицу.
...
Рейтинг: 0 / 0
Динамический SQL
    #32071421
Publik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это сделать через временную таблицу?
У меня как раз во временной таблице и хранится какие записи и из каких таблиц нужно удалить, но как их удалить быстро и "безболезненно" я незнаю.
...
Рейтинг: 0 / 0
Динамический SQL
    #32071430
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так будет быстро, к-во проходов будет равно мах. к-ву таблиц. Быстрее всё рано не получится:

[src]
DECLARE @str varchar(8000)
DECLARE CUR CURSOR LOCAL FOR
SELECT distinct TableName FROM MyTable

OPEN CUR
FETCH CUR_INS INTO @TableName
WHILE @@FETCH_STATUS >= 0
BEGIN
@str = 'DELETE ' + @TableName + ' from ' + @TableName + ' as t join MyTable m on m.TableName = ''' + @TableName + ''' and t.ID = m.ID'
EXEC(@str)
FETCH CUR_INS INTO @ID, @TableName
END
CLOSE CUR
DEALLOCATE CUR
[src]
...
Рейтинг: 0 / 0
Динамический SQL
    #32071431
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос: хочу штаны одеть быстро и безболезненно. КАК?
Ответ: ноги в штанины и вперед!
Вопрос: Нет, так мне не подходит, хотел бы через голову, но не получается. Может есть другой способ?

:))


Ты думаешь, что тут все советы дают "плохие и бесполезные" чтоли? Для прикола!?

Тады не в этот топик.............
...
Рейтинг: 0 / 0
Динамический SQL
    #32071500
Iam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Iam
Гость
Поясни четко, что надо сделать, а то не понятно.
Напрмер, или удалять, или выбирать, или что ?

Если удалять, то зачем выбирать ? Непонятно.. Во всяком случае на любые задачи все равно решение есть, токо объясни, что надо сделать...
...
Рейтинг: 0 / 0
Динамический SQL
    #32071504
BigVovch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
declare @dstr varchar( 8000 )
select @dstr = 'delete '+ tablename+ ' where [id] = ' + convert(varchar( 10 ), id) + char( 13 ) + char( 10 ) + 'GO'
from Mytable. 
exec (@dstr)
...
Рейтинг: 0 / 0
Динамический SQL
    #32071661
bantik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет ! Нужно написать

delete from Tablename
from TableName T, MyTable M
where T.id=M.iD

Если хочется, можно влепить это в строку и выполнять динамическим exec.

Удачи !
...
Рейтинг: 0 / 0
Динамический SQL
    #32071662
bantik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, на автопилоте был :-) Не нужно два from

delete Tablename
from TableName T, MyTable M
where T.id=M.iD
...
Рейтинг: 0 / 0
Динамический SQL
    #32071726
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- подразумевается отсутсвие счетчика в mytable
select identity(int,1,1) as ident ,tablename,[id]
into #t
from mytable
declare @count int,@maxident int,@tablename varchar(256),@id int,@s varchar (300)
select @count=1,@maxcount=max(ident) from #t
c:
select @count=@count+1,@tablename=tablename,@id=[id]
from #t
where ident=@count
set @s='delete from '+@tablename+' where [id]='+convert(varchar,@id)
exec()
if @count<=@maxcount goto c:
drop table #t
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]