gpt4 book ai didi

sql - 如何通过Powershell将参数传递给SQL脚本

转载 作者:行者123 更新时间:2023-12-04 16:44:25 24 4
gpt4 key购买 nike

我有一个调用 SQL 脚本的 Power-shell 脚本。这目前正在运行,但在我的 sql 脚本中,我有一些硬编码参数,我想通过 powershell 传递给 SQL 脚本。

所以这是来自 Power-shell 脚本的片段

function ExecSqlScript([string] $scriptName)
{
$scriptFile = $script:currentDir + $scriptName
$sqlLog = $script:logFileDir + $scriptName + "_{0:yyyyMMdd_HHmmss}.log" -f (Get-Date)
$result = sqlcmd -S uk-ldn-dt270 -U sa -P passwordhere3! -i $scriptFile -b | Tee-Object - filepath $sqlLog

if ($result -like "*Msg *, Level *, State *" -Or $result -like "*Sqlcmd: Error:*")
{
throw "SQL script " + $scriptFile + " failed: " + $result
}
}

try
{
ExecSqlScript "restoreDatabase.sql"
}
catch
{
//Some Error handling here
}

这是来自 SQL
USE MASTER
GO
DECLARE @dbName varchar(255)
SET @dbName = 'HardCodedDatabaseName'

所以我想传递 dbName 的值,有什么想法吗?

最佳答案

您可以利用 sqlcmd 的 scripting variables .这些可以在脚本文件中使用,并用 $() 标记。 .像这样,

-- Sql script file
use $(db);
select someting from somewhere;

打电话时 sqlcmd ,使用 -v用于分配变量的参数。像这样,
sqlcmd -S server\instance -E -v db ="MyDatabase" -i s.sql

编辑

设置变量时注意 Sql 语法。考虑以下脚本:
DECLARE @dbName varchar(255)
SET @dbName = $(db)
select 'val' = @dbName

当传递给 Sql Server 时,它看起来像这样(Profiler 在这里有帮助):
use master;

DECLARE @dbName varchar(255)
SET @dbName = foo
select 'val' = @dbName

这显然是无效的语法,如 SET @dbName = foo不会有多大意义。值应该像这样在单引号内,
sqlcmd -S server\instance -E -v db ="'foo'" -i s.sql

关于sql - 如何通过Powershell将参数传递给SQL脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22811357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com