SQLCMD: передать параметр database startig с номером в скрипт с помощью powershell

#sql #database #powershell #numbers #sqlcmd

#sql #База данных #powershell #числа #sqlcmd

Вопрос:

Из powershell мы запускаем следующую команду для создания базы данных. Имя базы данных начинается с числа:

 SQLCMD -S Z0EUW1WLSQL031PRUEBA -U rdb00001 -P "1234" -v datos="`"D:Datos`""  dbName="3DataBase" log="`"E:Logs`"" collation="Latin1_General_CI_AS" -i 10_CreateDB.sql -o 10_CreateDB.log
  

Скрипт «10_CreateDB.sql» содержит это:

 CREATE DATABASE $(dbName)  ON  PRIMARY
( NAME = N'$(dbName)', FILENAME = N'$(datos)$(dbName).mdf' )
 LOG ON
( NAME = N'$(dbName)_log', FILENAME = N'$(log)$(dbName)_log.ldf'  )
COLLATE $(collation)
GO
  

Мы получаем эту ошибку:

 Msg 102, Level 15, State 1, Server Z0EUW1WLSQL031PRUEBA, Line 1
Incorrect syntax near '3'.
  

Ответ №1:

 $ArgumentList = @(
    '-S Z0EUW1WLSQL031PRUEBA',
    '-U rdb00001',
    '-P "1234"',
    '-v datos="D:Datos"',
    'dbName="3DataBase" ',
    'log="E:Logs"',
    'collation="Latin1_General_CI_AS"',
    '-i 10_CreateDB.sql',
    '-o 10_CreateDB.log'
)

Start-Process "fullPathHereSQLCMD.exe" -ArgumentList $ArgumentList
  

Комментарии:

1. Как мы можем заменить значения параметров (например: «rdb00001») переменными в переменной $ArgumentList?

2. По-прежнему выдается ошибка: Start-Process "SQLCMD" -ArgumentList -S Z0EUW1WLSQL031PRUEBA -U rdb00001 -P "1234" -v datos=""D:Datos"" dbName="3DataBase" log="":Logs"" collation="Latin1_General_CI_AS" -i 10_CreateDB.sql -o 10_CreateDB.log Cannot find path '10_CreateDB.log' because it does not exist. CategoryInfo : ObjectNotFound: (10_CreateDB.log:String) [Get-Content], ItemNotFoundException FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand PSComputerName : S0EUL1WYSQL050 команда выполняется на S0EUL1WYSQL050.

3. вам нужно указать полный путь к файлу, а аргументы можно поместить в массив