SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Какво представлява режимът SQLCMD в SQL Server Management Studio?

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

Какво е SQLCMD

SQLCMD.exe е конзолна помощна програма, включена в инсталацията на SQL Server 2005 и по-нова версия. Обикновено можете да го намерите в път като c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Това е проста среда за скриптове, която позволява автоматизиране на задачи, свързани със SQL сървър. Например, можете да напишете и изпълните скрипт, който ще влезе в конкретен екземпляр на SQL Server, ще изпълни скриптове от дадена директория на тази връзка и ще съхрани изхода в определен файл.

Invoke-Sqlcmd cmdlet беше въведен със SQL Server 2008 като средство за замяна на този инструмент със стандартизиран, базиран на Powershell подход, запазващ по-голямата част от оригиналния синтаксис и функционалност.

Какво е режимът SQLCMD в SSMS

В SSMS, режим SQLLCMD е режим на изпълнение на скрипт, който симулира средата sqlcmd.exe и следователно приема някои команди, които не са част от езика T-SQL. За разлика от sqlcmd.exe , той се свързва с базата данни чрез SqlClient (по същия начин като SSMS), а не ODBC доставчик на данни, така че в някои аспекти може да има различно поведение от sqlcmd.exe .

Изпълнението на скриптове в режим SQLCMD позволява да се използват команди, типични за sqlcmd.exe заобикаляща среда. Въпреки това, няма поддръжка на IntelliSense или отстраняване на грешки за режим SQLCMD, така че поддържането на скриптове, които смесват чист T-SQL със специфичен за SQLCMD код, може да бъде мъка. Затова трябва да се използва само когато е необходимо.

Примерен случай на употреба

Да предположим, че една компания има конвенция за именуване за бази данни, които включват среда в името, напр.:MyDb_Prod , MyDb_Тест , MyDb_Dev . Тази конвенция може да се използва за свеждане до минимум на вероятността от грешки .

Когато разработчик напише T-SQL скрипт, той ще трябва да се изпълнява в различни среди в процеса на внедряване/тест, което ще изисква много версии на кода:

 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod

Вместо това можем да предположим, че името на базата данни ще бъде предоставено като SQLCMD променлива в процеса на внедряване и ще има точно същия файл, разгърнат във всички среди:

 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]

(в този прост пример името на базата данни може да бъде пропуснато напълно, но ако имате свързвания между база данни, използването на име на база данни е необходимо)



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Предупреждение за отпадане на таблици в студиото за управление на SQL Server 2008?

  2. Преобразуване на колона от дата в дата и час

  3. Период от време за набор от същите данни

  4. Преобразувайте неизвестен брой varchars, разделени със запетая в рамките на 1 колона в множество колони

  5. Има ли някакъв начин да видите празно пространство в редактора на заявки за SQL Server Management Studio Express 2005?