#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. вам нужно указать полный путь к файлу, а аргументы можно поместить в массив