我有以下脚本,名为alterTable.ps1。我试图通过在表中添加两个新列来改变表。
这是脚本
function die {
"Error: $($args[0])"
exit 1
}
function verifySuccess {
if (!$?) {
die "$($args[0])"
}
}
# Create variables and assign environment variables
$INSTANCE_HOST = $env:HOST
$INSTANCE_PORT = $env:PORT
$INSTANCE_NAME = $env:INSTANCE
$DATABASE_NAME = $env:DATABASE_NAME
# Execute the alter table, passing the variables
#sqlcmd -U sa -P sapassword -S "$INSTANCE_HOST\$INSTANCE_NAME,$INSTANCE_PORT" -q ”use $DATABASE_NAME; ALTER TABLE dbo.tabletest ADD Test1 VARCHAR(6) NULL, Test2 VARCHAR(10) NULL”
VerifySuccess "sqlcmd failed to alter table tabletest"
当我使用传递给脚本的值执行脚本时,会收到错误
C:\> .\alterTable.ps1 "WINDOWSHOST" "1433" "MSSQLSERVER" "dbname"
获取如下错误:
HResult 0x57,Level 16,State 1 SQL Server网络接口: 连接字符串无效[87]。 Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:与网络相关或特定于实例的 建立与SQL Server的连接时发生错误。 找不到服务器或无法访问服务器。
如果我在脚本中对这些值进行硬编码,那么它运行正常。
还有一件事,我如何在执行后退出脚本并检查退出状态?
答案 0 :(得分:0)
您永远不会访问传递给脚本的参数,而是从四个环境变量(您从未设置过?)中读取值。如果需要,您应该使用默认值设置为环境变量值的参数。例如:
param(
$INSTANCEHOST = $env:HOST,
$INSTANCEPORT = $env:PORT,
$INSTANCENAME = $env:INSTANCE,
$DATABASENAME = $env:DATABASE_NAME
)
function die {
"Error: $($args[0])"
exit 1
}
function verifySuccess {
if (!$?) {
die "$($args[0])"
}
}
# Execute the alter table, passing the variables
sqlcmd -U sa -P sapassword -S "$INSTANCEHOST\$INSTANCENAME,$INSTANCEPORT" -q ”use $DATABASENAME; ALTER TABLE dbo.tabletest ADD Test1 VARCHAR(6) NULL, Test2 VARCHAR(10) NULL”
VerifySuccess "sqlcmd failed to alter table tabletest"
像这样使用:
C:\> .\alterTable.ps1 -INSTANCEHOST "WINDOWSHOST" -INSTANCEPORT "1433" -INSTANCENAME "MSSQLSERVER" -DATABASENAME "dbname"