Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Дня доброго всем спецам и любителям SQL.
Коллеги, помогите, пожалуйста, решить след. проблемку:
нужно составить запрос на языке SQL, который бы очищал определенные таблицы в БД (я сама с SQL'ем очень сильно на Вы. а времени изучать всю "подноготную", к сожалению, мало ;(
Исходные данные:
БД от Навижн 5.01 крутится на MS SQL 2008 R2.
Имеется несколько мандантов (фирм). Некоторые из них используют зарплатный модуль и соотв-но таблицы, для оного предназначенные.
Задача: очистить (т.е. удалить все записи) в "зарплатных" таблицах.
В качестве параметров должны быть имя манданта и минимальное кол-во записей в таблице (т.е. если записей меньше N, то таблицу не трогаем)
Чтобы отфильтровать таблицы заплатного модуля можно использовать таблицу "Object", содержащую список всех таблиц БД. Эта таблица имеет среди прочих след. поля: ID (Номер таблицы), Type (это поле должно быть = "Table"), Name, Version List. Чтобы отобрать "зарплатные" таблицы, нужно отфильтровать таблицу Object по полю "Version List" (у зарплатных таблиц это поле содержит определенную комбинацию символов (либо *ZPP* либо *DKK*).
Имя навижнских таблиц на MS SQL Server выглядит след. образом: [NAV5SQL].[dbo].[Имя Манданта$Имя таблицы]

Буду очень признательна за помощь. :)
8 ноя 16, 12:10    [19869557]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
o-o
Guest
много чего написано, но так и неясно, надо все записи удалять, или только определенные.
вроде вот тут написано "все": Задача: очистить (т.е. удалить все записи) в "зарплатных" таблицах.
это делается командой truncate table myTable
имена своих таблиц сами подставьте
8 ноя 16, 12:25    [19869642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
kadawrik,
напишите процедуру для каждого модуля.
В процедуру внесите команды удаления записей для каждой таблицы этого модуля.
DELETE table1
DELETE table2
...
DELETE tableN

truncate требует ALTER TABLE разрешений.
8 ноя 16, 12:28    [19869660]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
o-o
Guest
сейчас куда не плюнь, все сисадмины.
чем меньше знаний, тем больше прав.
пускай транкейтит.
8 ноя 16, 12:31    [19869686]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Ув. Коллеги, как решить задачу в лоб, мне понятно. Но суть моей просьбы была имеено в том. чтобы НЕ писать для КАЖДОЙ таблицы и каждого манданта свой DELETE.
Таблиц несколько сотен! Как-то не хочется ручками каждую из них прописывать.

Хотелось бы сделать это изящно и кратко (через параметры): я ввожу название манданта и кол-во записей, а процерура сама формирует нужное имя таблицы и удаляет в ней все записи. Т.е. мне нужен цикл по строкам (отфильтрованной по полю "Version List") таблицы Object из которой мы берем поле Name и подставляем вместе с именем манданта в строку [NAV5SQL].[dbo].[Имя Манданта$Имя таблицы] и очищаем таблицу с полученным именем.
Полагаю, эта задача вполне осуществима средствами MS SQL.
8 ноя 16, 12:44    [19869799]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
kadawrik
Ув. Коллеги, как решить задачу в лоб, мне понятно. Но суть моей просьбы была имеено в том. чтобы НЕ писать для КАЖДОЙ таблицы и каждого манданта свой DELETE.
Таблиц несколько сотен! Как-то не хочется ручками каждую из них прописывать.

Хотелось бы сделать это изящно и кратко (через параметры): я ввожу название манданта и кол-во записей, а процерура сама формирует нужное имя таблицы и удаляет в ней все записи. Т.е. мне нужен цикл по строкам (отфильтрованной по полю "Version List") таблицы Object из которой мы берем поле Name и подставляем вместе с именем манданта в строку [NAV5SQL].[dbo].[Имя Манданта$Имя таблицы] и очищаем таблицу с полученным именем.
Полагаю, эта задача вполне осуществима средствами MS SQL.

осуществима, за вас написать?
8 ноя 16, 12:46    [19869816]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
kadawrik
Ув. Коллеги, как решить задачу в лоб, мне понятно. Но суть моей просьбы была имеено в том. чтобы НЕ писать для КАЖДОЙ таблицы и каждого манданта свой DELETE.
Таблиц несколько сотен! Как-то не хочется ручками каждую из них прописывать.


1. Нехорошо чужими руками жар загребать.
2. С вашей квалификацией - лучше руками. Успеют остановить.
3. Пишете для руками для одной. В MS Word-е генерируете для всех.
8 ноя 16, 12:48    [19869829]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
TaPaK, а что? религия не позволяет помочь ближнему? ;)
или это такое сильно закопиратченое ноухау, которое нельзя раскрывать непосвященным?
8 ноя 16, 12:51    [19869855]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
kadawrik
TaPaK, а что? религия не позволяет помочь ближнему? ;)
или это такое сильно закопиратченое ноухау, которое нельзя раскрывать непосвященным?

сделайте хоть что-то, что не получается вам подскажут, если постановка такая то это в раздел работа
8 ноя 16, 12:56    [19869901]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
kadawrik
TaPaK, а что? религия не позволяет помочь ближнему? ;)
или это такое сильно закопиратченое ноухау, которое нельзя раскрывать непосвященным?


1. Технология проста и незатейлива.
2. Запросом из "отфильтрованной по полю "Version List") таблицы Object из которой мы берем поле Name" генерируем скрипт удаления. Никаких циклов не надо.
3. Выполняем скрипт.
8 ноя 16, 12:59    [19869924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Понимаю обеспокоенность тутошних гуру за целостность нашей БД. Очень ценю Вашу заботу. Поспешу успокоить: для экспериментов предназначен тестовый сервер с тестовой БД.

Я наивно полагала, что истинный профессионал всегда поделится своими знаниями и подскажет менее опытным коллегам более рациональные пути решения задач.
Что ж, видимо ошиблась...либо не на тот форум попала. :( Очень жаль.
Вручную делать, размножать вордом ...или какие там еще "рациональные" методы мне предлагалаи, я не буду!
8 ноя 16, 13:01    [19869941]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
kadawrik
Понимаю обеспокоенность тутошних гуру за целостность нашей БД. Очень ценю Вашу заботу. Поспешу успокоить: для экспериментов предназначен тестовый сервер с тестовой БД.

Я наивно полагала, что истинный профессионал всегда поделится своими знаниями и подскажет менее опытным коллегам более рациональные пути решения задач.
Что ж, видимо ошиблась...либо не на тот форум попала. :( Очень жаль.
Вручную делать, размножать вордом ...или какие там еще "рациональные" методы мне предлагалаи, я не буду!

Нам, гуру, очень обидно, что "свежая кровь" совсем обленилась искать решения в гугле и стэковерфлоу с целью допилить по себя, и сразу бежит требовать готовые решения на sql.ru.
SET NOCOUNT ON
;
SELECT
  [table] = ss.[path],
  [tsql] = 'TRUNCATE TABLE ' + ss.[path] + ''
FROM
  sys.tables t
  INNER JOIN sys.schemas s ON (
        s.[schema_id] = t.[schema_id] )
  CROSS APPLY (
    SELECT
      [path] = QUOTENAME( s.[name] ) + '.' + QUOTENAME( t.[name] )
  ) ss
WHERE
  s.[name] NOT IN ( 'dbo' )
ORDER BY
  1
;

Дальше сами "допилите", или и здесь помощь понадобится?
8 ноя 16, 13:06    [19869975]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
Руслан Дамирович
kadawrik
Понимаю обеспокоенность тутошних гуру за целостность нашей БД. Очень ценю Вашу заботу. Поспешу успокоить: для экспериментов предназначен тестовый сервер с тестовой БД.

Я наивно полагала, что истинный профессионал всегда поделится своими знаниями и подскажет менее опытным коллегам более рациональные пути решения задач.
Что ж, видимо ошиблась...либо не на тот форум попала. :( Очень жаль.
Вручную делать, размножать вордом ...или какие там еще "рациональные" методы мне предлагалаи, я не буду!

Нам, гуру, очень обидно, что "свежая кровь" совсем обленилась искать решения в гугле и стэковерфлоу с целью допилить по себя, и сразу бежит требовать готовые решения на sql.ru.
SET NOCOUNT ON
;
SELECT
  [table] = ss.[path],
  [tsql] = 'TRUNCATE TABLE ' + ss.[path] + ''
FROM
  sys.tables t
  INNER JOIN sys.schemas s ON (
        s.[schema_id] = t.[schema_id] )
  CROSS APPLY (
    SELECT
      [path] = QUOTENAME( s.[name] ) + '.' + QUOTENAME( t.[name] )
  ) ss
WHERE
  s.[name] NOT IN ( 'dbo' )
ORDER BY
  1
;

Дальше сами "допилите", или и здесь помощь понадобится?


CROSS APPLY то зачем?
8 ноя 16, 13:11    [19870014]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
aleks2
CROSS APPLY то зачем?

Я ленивый, два раза одну формулу вычислять не люблю.
А что, у вас личная неприязнь к CROSS APPLY?
8 ноя 16, 13:15    [19870032]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
o-o
Guest
kadawrik
Я наивно полагала, что истинный профессионал всегда поделится своими знаниями и подскажет менее опытным коллегам более рациональные пути решения задач.

это называется развод на жалость.
что вам непонятно, что надо курсором это делать и динамику собирать?

все команды, где фигурирует какая-либо таблица, где таблица -- часть команды, а не параметр,
требуют динамики для подстановки имени таблицы.

все, что требует построчной обработки, типа исполнение кучи команд, требует написания курсора.
либо: селектом генерят динамику, выводят это в виде текста в Management Studio (не в грид, в текст)
копируют полученное и запускают эту тучу команд.

курсор надежнее в смысле обработки ошибок.
если тупой truncate, то сойдет и copy+paste
8 ноя 16, 13:15    [19870036]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,
автор
либо: селектом генерят динамику, выводят это в виде текста в Management Studio (не в грид, в текст)
копируют полученное и запускают эту тучу команд.

ну можно и так
	DECLARE @Str VARCHAR(MAX) = ''	
	SELECT @Str += Value FROM @SQL_text ORDER BY Id DESC;
	EXEC (@Str)
8 ноя 16, 13:18    [19870047]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Руслан Дамирович,

уже что-то. Благодарю. :)

"Допилить" попробую сама.

"Свежая кровь" не обленилась. Просто для нее SQL- не основные проф. обязанности. и занимается им постольку поскольку и не часто. ;)
Стэковерфлоу сейчас совсем другими запросами: переходим на новый НАВ. В связи с чем, работы вагон.
8 ноя 16, 13:19    [19870058]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
Руслан Дамирович
aleks2
CROSS APPLY то зачем?

Я ленивый, два раза одну формулу вычислять не люблю.
А что, у вас личная неприязнь к CROSS APPLY?

CROSS APPLY - зло.

Лень вычислять - пользуй with.
8 ноя 16, 14:03    [19870339]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Владислав Колосов
Member

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

зло? Вода, молоко, дуть?
8 ноя 16, 14:23    [19870431]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
Владислав Колосов
aleks2,

зло? Вода, молоко, дуть?

Хоть пузыри надувай.
8 ноя 16, 14:27    [19870454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
автор
Полагаю, эта задача вполне осуществима средствами MS SQL.


SQL может почти что всё, но это, тем не менее не среда выполнения прикладных задач. Человек может переносить грузы, копать ямы, но он использует для этого не свои руки, а соответствующие инструменты.

Напишите приложение, которое будет формировать требуемые запросы. Пусть даже это будет VB-скрипт.
8 ноя 16, 14:28    [19870461]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
aleks2
Guest
Владислав Колосов
автор
Полагаю, эта задача вполне осуществима средствами MS SQL.


SQL может почти что всё, но это, тем не менее не среда выполнения прикладных задач. Человек может переносить грузы, копать ямы, но он использует для этого не свои руки, а соответствующие инструменты.

Напишите приложение, которое будет формировать требуемые запросы. Пусть даже это будет VB-скрипт.


Поциент, вы бредите.

Зачем тут сишарп?
8 ноя 16, 14:33    [19870486]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
aleks2
Зачем тут сишарп?

СИ диез же. И вообще, в оригинале предлагался VB-скрипт.
aleks2
Поциент, вы бредите.
8 ноя 16, 15:53    [19870900]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
У вас тут 4 ошибки в слове пиво:
aleks2
CROSS APPLY - пользуй.
with - зло.
8 ноя 16, 15:55    [19870914]     Ответить | Цитировать Сообщить модератору
 Re: Помогите, пжлст, составить запрос на MS SQL (выборка и очистка таблиц из списка)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
шарп, VB... Excel достаточно :)
8 ноя 16, 15:55    [19870918]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить