|
|
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Можно ли каким либо образом сделать следующее select exec('delete from '+tablename+' where [id]='+[id]) from mytable Т. е. выполнить удаление для каждой выбранной строки из таблице Mytable. Таблица Mytable содержит имя таблицы и идентификатор строки которую надо удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:13:18 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
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 Это упрощенный вариант. Дальше дело за тобой. Объедени все это в процедуру и дерзай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:25:40 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Извиняюсь что не уточнил. Мне нужно чтобы это работало без использования курсоров. Они медленно работают а записей может быть много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:29:23 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Если вы хотите удалить то это делается просто, Код: plaintext или вы хотите одновременно УДАЛЯТЬ и ВЫБИРАТЬ, тогда сделайте это через временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:35:52 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Как это сделать через временную таблицу? У меня как раз во временной таблице и хранится какие записи и из каких таблиц нужно удалить, но как их удалить быстро и "безболезненно" я незнаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:48:01 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Вот так будет быстро, к-во проходов будет равно мах. к-ву таблиц. Быстрее всё рано не получится: [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] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:58:46 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Вопрос: хочу штаны одеть быстро и безболезненно. КАК? Ответ: ноги в штанины и вперед! Вопрос: Нет, так мне не подходит, хотел бы через голову, но не получается. Может есть другой способ? :)) Ты думаешь, что тут все советы дают "плохие и бесполезные" чтоли? Для прикола!? Тады не в этот топик............. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:59:07 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Поясни четко, что надо сделать, а то не понятно. Напрмер, или удалять, или выбирать, или что ? Если удалять, то зачем выбирать ? Непонятно.. Во всяком случае на любые задачи все равно решение есть, токо объясни, что надо сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 17:42:09 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 17:55:35 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Привет ! Нужно написать delete from Tablename from TableName T, MyTable M where T.id=M.iD Если хочется, можно влепить это в строку и выполнять динамическим exec. Удачи ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2002, 21:32:06 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, на автопилоте был :-) Не нужно два from delete Tablename from TableName T, MyTable M where T.id=M.iD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2002, 21:33:29 |
|
||
|
Динамический SQL
|
|||
|---|---|---|---|
|
#18+
-- подразумевается отсутсвие счетчика в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 03:10:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32071662&tid=1818547]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 305ms |

| 0 / 0 |
