【问题标题】:SQLCMD: Pass parameter database startig with number to script using powershellSQLCMD:使用powershell将参数数据库以数字开头传递给脚本
【发布时间】:2020-11-18 11:46:42
【问题描述】:

powershell 中,我们运行以下命令来创建数据库。数据库名称以数字开头:

SQLCMD -S Z0EUW1WLSQL031\PRUEBA -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 Z0EUW1WLSQL031\PRUEBA, Line 1
Incorrect syntax near '3'.

【问题讨论】:

    标签: sql database powershell numbers sqlcmd


    【解决方案1】:
    $ArgumentList = @(
        '-S Z0EUW1WLSQL031\PRUEBA',
        '-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 "fullPathHere\SQLCMD.exe" -ArgumentList $ArgumentList
    

    【讨论】:

    • 如何用变量$ArgumentList中的变量替换参数值(例如:“rdb00001”)?
    • 仍然出现错误:Start-Process "SQLCMD" -ArgumentList -S Z0EUW1WLSQL031\PRUEBA -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 是运行命令的位置。
    • 需要指定文件的全路径,参数可以放入数组中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2011-08-01
    • 2015-06-07
    • 2017-05-08
    • 2019-07-07
    相关资源
    最近更新 更多