Использование не хранимых процедур в скриптах T-SQL Microsoft SQL

1. fixin 4253 28.01.24 21:55 Сейчас в теме
Хочу повторяющиеся куски кода вынести в процедуры, даже в CMD файлах такое возможно.
А как это сделать в T-SQL?

---- BACKUP -------------------
SET @DatabaseName = N'LA';

SET @Backup1 = N'\\la2\backups\' + @DatabaseName + '_diff.bak'
BACKUP DATABASE @DatabaseName 
	TO DISK = @Backup1
    WITH DIFFERENTIAL, INIT, FORMAT, STATS = 1, CHECKSUM

---- BACKUP -------------------
SET @DatabaseName = N'MA';

SET @Backup1 = N'\\la2\backups\' + @DatabaseName + '_diff.bak'
BACKUP DATABASE @DatabaseName 
	TO DISK = @Backup1
    WITH DIFFERENTIAL, INIT, FORMAT, STATS = 1, CHECKSUM
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. fixin 4253 29.01.24 16:57 Сейчас в теме
(2) Этот ответ не о том, даже заголовок вопроса не тот "скрипт tsql для поиска таблиц, не используемых хранимыми процедурами, представлениями, функциями и т.д.?"
4. VmvLer 29.01.24 17:11 Сейчас в теме
(3) если там нырнуть в веб архив, то можно найти примеры от бородатого мужика (John Sheesley), на языке носителя.
7. fixin 4253 29.01.24 17:34 Сейчас в теме
(4) нырнул, увидел только stored procedure.
Прикрепленные файлы:
5. redfred 29.01.24 17:12 Сейчас в теме
8. fixin 4253 29.01.24 17:34 Сейчас в теме
(5) что курсор? Типа массив баз и для кадой делать одно и то же. Ну на безрыбье..
10. redfred 29.01.24 17:45 Сейчас в теме
(8) Отчего ж на безрыбье-то сразу? Вполне стандартный способ для бэкапов и прочих вещей. Берешь список баз из sys.databases, курсором пробегаешь по всем и делаешь что нужно было. Ну, или через sp_MSforeachdb, но там были свои подводные камни, емнип
11. fixin 4253 29.01.24 17:55 Сейчас в теме
(10)
а, вот где собака покопалась...
то ли я неправильно донес смысл задачи, то ли ее не так поняли.

Уточню - мне не надо получать список баз. я знаю их названия.

Мне нужно 4 раза (4 базы) вызвать одно и то же действие, по разу для каждой базы. Для этого логично было бы использовать функцию. Но как ее объявить чисто для скрипта, чтобы не хранилась в базе? Или плюнуть и сохранить в базе?
14. redfred 29.01.24 19:20 Сейчас в теме
(11) Никто не мешает просто по списку значений проехать

DECLARE @DatabaseName NVARCHAR(255);
DECLARE @Backup1 NVARCHAR(255);

DECLARE cursor_db CURSOR
FOR SEL ECT * FROM (VALUES (N'LA'),(N'MA')) AS t(a)

OPEN cursor_db;
FETCH NEXT FROM cursor_db INTO 
     @DatabaseName;

WHILE @@FETCH_STATUS = 0
BEGIN

    SET @Backup1 = N'\\la2\backups\' + @DatabaseName + '_diff.bak'

    BACKUP DATABASE @DatabaseName 
    TO DISK = @Backup1
    WITH DIFFERENTIAL, INIT, FORMAT, STATS = 1, CHECKSUM
    
	FETCH NEXT FR OM cursor_db INTO 
        @DatabaseName;
END;

CLOSE cursor_db;
DEALLOCATE cursor_db;
Показать
6. VZyryanov 29.01.24 17:33 Сейчас в теме
А что в скрипте нельзя создать процедуру, используя CREATE PROC?
9. fixin 4253 29.01.24 17:35 Сейчас в теме
(6) это будет хранимая процедура в базе master, я подозреваю.
12. VZyryanov 29.01.24 18:08 Сейчас в теме
(9) Ну и что. В конце скрипта можно удалить.
Надо посмотреть на имена с #.
13. fixin 4253 29.01.24 19:00 Сейчас в теме
(12) да можно и не удалять. При повторном запуске скрипта он обновит хранимые процедуры?
15. redfred 29.01.24 19:24 Сейчас в теме
(9) Кстати можно создавать временные процедуры в tempdb через CREATE PROC #my_proc и вызывать через exec #my_proc, если прямо хочется таким путём
16. fixin 4253 29.01.24 19:26 Сейчас в теме
(15) хочется вообще создавать процедуру в теле скрипта, не хранимую. Хочу понять, умеет T-SQL Такое или нет. А # что обозначает?
17. redfred 29.01.24 19:30 Сейчас в теме
(16) # значит временная, в рамках текущего сеанса. Открыли скрипт, запустили. Где-то там в начале скрипта создали процедуру, ниже её повызывали. Закрыли окно - всё, сессия закрылась, процедура сгинула. Но чисто для бэкапа это какой-то оверкилл
18. fixin 4253 29.01.24 21:13 Сейчас в теме
(17) вот и я о том же сожалею, что нет макросов. ;-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот