0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14

Подскажите со скриптом T-SQL

04.07.2022, 08:57. Показов 2320. Ответов 25

Студворк — интернет-сервис помощи студентам
Доброе время суток.

Хочу сделать джоб на обслуживание нескольких баз (которые я укажу сам).

Мне их нужно перебрать и произвести какое либо действие с каждой базой, например обновление статистики.

При конструкции
SQL
1
2
3
4
5
6
7
8
9
EXEC sp_Msforeachdb "
IF ( '?' in ( 'Петров_ТЕСТ1', 'Петров_ТЕСТ2' ) )
BEGIN
USE [?]
 
-- Тут много инструкций ...
 
END
"
не работает с большими кусками кода.

Как лучше реализовать такую потребность?

Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2022, 08:57
Ответы с готовыми решениями:

Подскажите со скриптом
Не сочтите за рекламу хочу создать букс ради интереса, а вдруг и что то сложится. Нашел несколько скриптов, вот несколько из примеров: ...

Подскажите что не так со скриптом
Привет программисты. Имеется такой скрипт: <script type="text/javascript"> $(document).ready(function(){var hs = $('ul.hide_fifteen'); ...

Unity android подскажите со скриптом
Всем привет. Мне необходимо чтобы в игре под Android, при нажатии на кнопку, появоялся обьект на сцене. Как переходить на другую сцену...

25
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 09:06
Цитата Сообщение от Sergey33Rus Посмотреть сообщение
Как лучше реализовать такую потребность?
Использование мастера планов обслуживания
0
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 09:09  [ТС]
мне не подходит этот вариант в силу определенных причин, я хотел бы узнать как реализовать это в коде
0
5988 / 4563 / 1096
Регистрация: 29.08.2013
Сообщений: 28,203
Записей в блоге: 3
04.07.2022, 09:21
создаешь действие в плане обслуживания, а потом смотришь код - там где то должна быть кнопка "Посмотреть SQL код"
и этот код переносишь в свою процедуру

не забудь проверку на наличие ошибок и запись в лог
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
04.07.2022, 09:50
Sergey33Rus, зачем sp_Msforeachdb, если внутри скрипта явно перечислены БД?
0
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 10:00  [ТС]
для того, чтобы sp_Msforeachdb прошелся именно по этим базам и внутри выполнил для них определенные действия циклично, например для каждой БД вызвал бы хранимую процедуру, в которую я пытался передать значение базы, но в процедурах нельзя использовать оператор USE
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
04.07.2022, 10:05
Лучший ответ Сообщение было отмечено Sergey33Rus как решение

Решение

Sergey33Rus, можно без USE
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE @proc sysname, @script NVARCHAR(MAX) = N'-- Тут много инструкций ...';
DECLARE @db TABLE (name sysname);
INSERT INTO @db (name) VALUES ('Петров_ТЕСТ1'), ('Петров_ТЕСТ2');
 
DECLARE db CURSOR LOCAL FAST_FORWARD FOR
 SELECT name + N'.sys.sp_executesql' FROM @db WHERE DB_ID(name) IS NOT NULL;
 
OPEN db;
WHILE 1 = 1
BEGIN
 FETCH NEXT FROM db INTO @proc;
 IF @@FETCH_STATUS <> 0
  BREAK;
 
 EXEC @proc @script;
END;
CLOSE db;
DEALLOCATE db;
1
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 10:14  [ТС]
T-SQL
1
2
3
DECLARE @proc sysname, @script NVARCHAR(MAX) = N'
PRINT "1"';
...
Не печатает
0
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 10:21
Цитата Сообщение от Sergey33Rus Посмотреть сообщение
Не печатает
Что не печатает?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE @proc sysname, @script NVARCHAR(MAX) = N'-- Тут много инструкций ...';
DECLARE @db TABLE (name sysname);
INSERT INTO @db (name) VALUES ('master'), ('model');
 
DECLARE db CURSOR LOCAL FAST_FORWARD FOR
 SELECT name + N'.sys.sp_executesql' FROM @db WHERE DB_ID(name) IS NOT NULL;
 
OPEN db;
WHILE 1 = 1
BEGIN
 FETCH NEXT FROM db INTO @proc;
 IF @@FETCH_STATUS <> 0
  BREAK;
 
-- EXEC @proc @script;
print @proc + ' ' + @script
END;
CLOSE db;
DEALLOCATE db;
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
04.07.2022, 10:29
Цитата Сообщение от Sergey33Rus Посмотреть сообщение
Не печатает
T-SQL
1
@script NVARCHAR(MAX) = N'print ''1'''
Строковые литералы задаются одиночными кавычками.
1
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 10:30  [ТС]
Где -- Тут много инструкций ... , пытаюсь выполнить инструкцию PRINT,

Выхлоп
T-SQL
1
2
3
(2 rows affected)
 
Completion time: 2022-07-04T10:29:37.7473916+03:00
0
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 10:33
Лучший ответ Сообщение было отмечено Sergey33Rus как решение

Решение

Цитата Сообщение от Sergey33Rus Посмотреть сообщение
Выхлоп
Что не получается?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE @proc sysname, @script NVARCHAR(MAX) = N' print ''-- Тут много инструкций print...''';
DECLARE @db TABLE (name sysname);
INSERT INTO @db (name) VALUES ('master'), ('model');
 
DECLARE db CURSOR LOCAL FAST_FORWARD FOR
 SELECT name + N'.sys.sp_executesql' FROM @db WHERE DB_ID(name) IS NOT NULL;
 
OPEN db;
WHILE 1 = 1
BEGIN
 FETCH NEXT FROM db INTO @proc;
 IF @@FETCH_STATUS <> 0
  BREAK;
 
EXEC @proc @script;
 
END;
CLOSE db;
DEALLOCATE db;
1
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 10:38  [ТС]
ОГОНЬ!
Спасибо! очень помогли, бился с пятницы.
То, что надо!
0
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 10:43
Цитата Сообщение от Sergey33Rus Посмотреть сообщение
То, что надо!
Это уважаемому invm лайк поставьте.
0
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 16:08  [ТС]
Раз пошла такая пьянка) подскажите пожалуйста, а из блока, где инструкции, как то можно добраться к глобал переменным, чтобы их изменить?


DECLARE @logmessage -- сюда
DECLARE @proc sysname, @script NVARCHAR(MAX) = N' --отюда ';

Спасибо!
0
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 16:19
Хранимая процедура sp_executesql - Использование параметра OUTPUT
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
04.07.2022, 16:21
Лучший ответ Сообщение было отмечено Sergey33Rus как решение

Решение

Цитата Сообщение от Sergey33Rus Посмотреть сообщение
DECLARE @logmessage -- сюда
DECLARE @proc sysname, @script NVARCHAR(MAX) = N' --отюда ';
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE @logmessage NVARCHAR(MAX), @proc sysname, @script NVARCHAR(MAX) = N'set @logmessage = db_name()';
DECLARE @db TABLE (name sysname);
INSERT INTO @db (name) VALUES ('Петров_ТЕСТ1'), ('Петров_ТЕСТ2');
 
DECLARE db CURSOR LOCAL FAST_FORWARD FOR
 SELECT name + N'.sys.sp_executesql' FROM @db WHERE DB_ID(name) IS NOT NULL;
 
OPEN db;
WHILE 1 = 1
BEGIN
 FETCH NEXT FROM db INTO @proc;
 IF @@FETCH_STATUS <> 0
  BREAK;
 
 EXEC @proc @script, N'@logmessage nvarchar(max) output', @logmessage output;
 SELECT @logmessage;
END;
CLOSE db;
DEALLOCATE db;
0
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
04.07.2022, 16:39  [ТС]
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DECLARE @logmessage NVARCHAR(MAX), @proc sysname, @script NVARCHAR(MAX) = N'set @logmessage = ''11''  PRINT @logmessage;';
DECLARE @db TABLE (name sysname);
INSERT INTO @db (name) VALUES ('Петров_ТЕСТ1'), ('Петров_ТЕСТ2');
 
DECLARE db CURSOR LOCAL FAST_FORWARD FOR
 SELECT name + N'.sys.sp_executesql' FROM @db WHERE DB_ID(name) IS NOT NULL;
 
OPEN db;
WHILE 1 = 1
BEGIN
 FETCH NEXT FROM db INTO @proc;
 IF @@FETCH_STATUS <> 0
  BREAK;
 
 EXEC @proc @script, N'@logmessage nvarchar(max) output', @logmessage output;
 SELECT @logmessage;
 PRINT @logmessage;
END;
CLOSE db;
DEALLOCATE db;
Тишина
T-SQL
1
2
3
(2 rows affected)
 
Completion time: 2022-07-04T16:38:52.4997209+03:00
0
671 / 294 / 120
Регистрация: 12.04.2022
Сообщений: 1,003
04.07.2022, 21:10
Цитата Сообщение от Sergey33Rus Посмотреть сообщение
Тишина
А сравнить работающий скрипт с неработающим, выяснить чем отличаются?

Кликните здесь для просмотра всего текста
чесслово влом разницу показывать
0
0 / 0 / 0
Регистрация: 04.07.2022
Сообщений: 14
05.07.2022, 07:57  [ТС]
объявили
T-SQL
1
DECLARE @logmessage
присвоили ей в скрипте значение, вытащили через до сих пор непонятную конструкцию (про OUTPUT читал)
T-SQL
1
EXEC @proc @script, N'@logmessage nvarchar(max) output', @logmessage output;
открываем переменную, а там шиш и ошибок нигде нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2022, 07:57
Помогаю со студенческими работами здесь

Подскажите пожалуйста с скриптом, как запустить?
#!/bin/bash pub=&quot;$1&quot; declare -a base58=(1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T U V W X Y Z a b c d e f g h i j k m n...

Подскажите как работать со скриптом ребкком
Вопрос состоит в том что-бы зделать БОТА который будет раз в 61минуту выполнять 1 функцию! парни очень прошу ХЕЛП:cry:

Подскажите с магазином (Со скриптом wap игры)
Привет всем ! Сегодня делаю мобильную игру и встретил ошибку , не показывает картинку вещи , все есть на сервере , но видимо не настоян...

Пожалуйста подскажите что не так со скриптом PowerShell!
Get-Content -Path C:\Users\Администратор\Desktop\u.csv | Unlock-ADAccount -Identity {$_} | If({$_} -eq NULL) {Write-Host {$_} &quot;Учетной...

Подскажите новичку с скриптом для Google Chart
Доброго дня суток! Вот пример: https://jsfiddle.net/w1mhpz1o/ Подскажите, что не так, как переделать первый вариант чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru