Ayo*_*ina 5 sql shell powershell
我有一个调用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
}
Run Code Online (Sandbox Code Playgroud)
这是来自SQL
USE MASTER
GO
DECLARE @dbName varchar(255)
SET @dbName = 'HardCodedDatabaseName'
Run Code Online (Sandbox Code Playgroud)
所以我想传递dbName的值,任何想法?
von*_*ryz 10
您可以利用sqlcmd的脚本变量.这些可以在脚本文件中使用并标记为$().像这样,
-- Sql script file
use $(db);
select someting from somewhere;
Run Code Online (Sandbox Code Playgroud)
调用时sqlcmd,使用-v参数分配变量.像这样,
sqlcmd -S server\instance -E -v db ="MyDatabase" -i s.sql
Run Code Online (Sandbox Code Playgroud)
编辑
设置变量时请注意Sql语法.请考虑以下脚本:
DECLARE @dbName varchar(255)
SET @dbName = $(db)
select 'val' = @dbName
Run Code Online (Sandbox Code Playgroud)
传递给Sql Server,它看起来像这样(Profiler在这里帮助):
use master;
DECLARE @dbName varchar(255)
SET @dbName = foo
select 'val' = @dbName
Run Code Online (Sandbox Code Playgroud)
这显然是无效的语法,因为SET @dbName = foo没有多大意义.该值应该在单引号内,如此
sqlcmd -S server\instance -E -v db ="'foo'" -i s.sql
Run Code Online (Sandbox Code Playgroud)
以防万一其他人需要这样做......这是一个工作示例。
\n\n电源外壳脚本:
\n\nsqlcmd -S uk-ldn-dt270 -U sa -P 1NetNasdf\xc2\xa3! -v db = "\'DatabaseNameHere\'" -i $scriptFile -b | Tee-Object -filepath $sqlLog\nRun Code Online (Sandbox Code Playgroud)\n\n注意 -v 开关来分配变量
\n\n这是 MS SQL:
\n\nUSE MASTER\nGO\n\nif db_id($(db)) is null\n\nBEGIN\n EXEC(\'\n RESTORE DATABASE \' + $(db) + \'\n FROM DISK = \'\'D:\\DB Backup\\EmptyLiveV5.bak\'\'\n WITH MOVE \'\'LiveV5_Data\'\' TO \'\'C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\LiveV5_\' + $(db) + \'.MDF\'\',\n MOVE \'\'LiveV5_Log\'\' To \'\'C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\LiveV5_\' + $(db) + \'_log.LDF\'\', REPLACE,\n STATS =10\')\nEND\nRun Code Online (Sandbox Code Playgroud)\n\n注意:您不必像这样将脚本变量分配给普通的 sql 变量。
\n\nSET @dbName = $(db)\nRun Code Online (Sandbox Code Playgroud)\n\n你可以在你的sql代码中使用它。- 快乐编码。
\n| 归档时间: |
|
| 查看次数: |
17598 次 |
| 最近记录: |