Чи існує концепція "включити файл" у SQL Server?


19

У мене є набір сценаріїв, які потрібно запустити в певному порядку. Я хотів би створити "головний файл", в якому перераховані всі інші файли та їх правильний порядок. В основному, як включити файл з C ++ або ASP / VBScript.

Відповіді:


19

Якщо ви використовуєте SQLCMD , ви можете використовувати :r FileNameдля включення окремого .sql-файлу.

: r Ім'я файлу

Розбирає додаткові оператори T-SQL та команди SQLCMD з файлу, визначеного FileName, в кеш оператора. Ім'я файлу читається відносно каталогу запуску для Visual Studio. Файл зчитується та виконується після того, як зустрічається термінатор партії. Ви можете видавати кілька: r команд. У файл можна включити будь-яку команду SQLCMD, включаючи пакетний термінатор, визначений у меню Інструменти, Параметри. Ви можете використовувати: r у скрипті перед розгортанням або після розгортання для включення інших сценаріїв.


Чи використовуєте ви цю функцію самостійно?
bernd_k

Я активно використовую його в проектах інструментів даних SQL Server. Це дійсно допомагає, коли я намагаюся організувати вибіркові дані, які виконуються як пост-скрипт.
Джонатан Аллен

4

У сенсі стародавніх препроцесорів С точно немає

  • T-SQL сам по собі не має такої концепції
  • sqlcmd і sqlcmdmode SSMS не обробляються відносні файлові шляхи
  • sqlcmd і sqlcmdmode SSMS не підтримують умовного включення

Якщо у вас є набір файлів із заданими абсолютними шляхами, які ви хочете включити в безумовному порядку, ви можете використовувати інструмент командного рядка sqlcmd або використовувати SSMS у sqlcmdmode, як згадували @mfredrickson і @Marian.


Але якщо ви хочете відносні шляхи або умовні включення, вам потрібно скористатися деякою обгорткою, яка викликає sqlcmd (або одним із її застарілих попередників isql або osql).

В даний час на своїй роботі в цій ситуації я переглядаю та розширюю старий vbs та hta-код. Я не зовсім задоволений, але це прагматичне рішення. Він працює, і кінцевий користувач знаходиться вдома з hta GUI, і додаткова установка програмного забезпечення не потрібна.

Щодо нового дизайну, я б почав думати про використання WPF та PowerShell для завершення дзвінків sqlcmd, але з нашими нинішніми клієнтами я не можу припустити наявність PowerShell V2.

Ще в колишні часи ми писали для цього прості партії cmd, оме з них досі використовуються.

Напевно, існують поточні інструменти, особливо ті, які орієнтовані на Workflow, які тут можуть бути підходящими. Я з ними не знайомий.


3

Поряд з режимом SQLCMD в студії управління, ви також можете використовувати пакетний файл, який буде використовуватися як головний файл для упорядкування та виклику всіх файлів sql за допомогою утиліти SQLCMD .

Режим SQLCMD - це моделювання використання утиліти всередині студії управління, тому великої різниці між режимами немає. За винятком того, що колись я вважаю за краще запускати партії (більше немає відкриття M Studio ... завантаження правильних db ... тощо). Я вважаю за краще налаштувати все в партії, включаючи вихідні файли.


2

Я погоджуюся, препроцесор T-SQL дуже потрібен. Я розробив свій власний у C #, який зайняв мене як годину. Окрім контролю над порядком виконання SQL-скриптів, він також дозволяє мені мати макроси, які виглядають як скалярні UDF та зручні у використанні, але виконують так само швидко, як і вбудовані UDF.


+1 - Я багато разів робив подібні речі з інструментами для створення шаблонів. Хоча sqlcmd має деякі засоби для змінної підстановки, я б подарував комусь, хто реалізував гідний плагін передпроцесорного плагіна для SSMS, великий поцілунок у нижній частині.
Занепокоєння

1
@AK, ви б не хотіли детальніше зупинитися на цьому? Можливо, опублікуйте якийсь код на github?
Крейг

2

Мені подобається відповідь bernd_k . Залежно від того, як ви назвали свої сценарії, наприклад, включаючи номер, SQL Server PowerShell (SQLPS) може використовуватися, якщо ви працювали з SQL Server 2008 або новішою версією. Тоді навіть якщо ви використовували SQL 2005, ви можете використовувати PowerShell та SMO для 2005 року.

Бічна примітка: Я вважаю, що SQLCMD з часом буде внесений до списку, що знецінився, і його замінять на SQLPS, PowerShell.

Є також кілька інших варіантів.

  1. Налаштуйте кожен сценарій як крок у роботі SQL Agent. Ви можете встановити порядок їх виконання.
  2. Створіть пакет SSIS для виклику кожного файлу. Це може запропонувати трохи більше контролю та запропонувати трохи більше варіантів ведення журналу. Мені подобається цей метод, якщо результат одного сценарію потрібно перевірити до наступного виконання.

Я не думаю, що SQLCMD буде знецінено, оскільки це так важливо для роботи інструментів даних SQL Server і DACPAC.
Джонатан Аллен

@JonathanAllen Якщо вам трапляється знайти будь-яку поточну документацію, яка показує управління DACPAC, використовуючи, SQLCMDдайте мені знати, тому що більшість того, що я знаходжу, - це посилання на PowerShell . Я також не бачу посилання, де sqlcmdвикористовується SSDT, за винятком, можливо, для порівняння схем, але я ніколи не використовую створені сценарії.
Шон Мелтон

Сценарії SSDT - це сценарії sqlcmd. Ось так він обробляє параметри, визначені користувачем, і такі речі, як ім'я бази даних. Якщо ви хочете розгорнути DACPAC за допомогою SqlPackage.exe, це посилання показує, як пройти параметри sqlcmd. msdn.microsoft.com/en-us/…
Джонатан Аллен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.