我有这个脚本(my_script.sql):
SET NOCOUNT ON;
DECLARE @SchemaName NVARCHAR(128);
DECLARE @TableName NVARCHAR(128);
SET @SchemaName = '$(SchemaName)';
SET @TableName = '$(TableName)';
IF @SchemaName IS NULL or @SchemaName = ''
BEGIN
SET @SchemaName = 'dbo';
END
PRINT 'The full table name is: ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName);
当我使用以下命令从命令行调用它时:
sqlcmd -S my_db_ip -U username -P myPassword -d my_db_name
-i my_script.sql -v SchemaName dbo TableName Users
我在终端中得到以下输出:
The full table name is: [dbo].[Users]
我想要,但是如果部署了脚本并且用户不知道
SchemaName
是什么,他们可以让它使用默认的“dbo”。
但是,当使用
调用时sqlcmd -S my_db_ip -U username -P myPassword -d my_db_name
-i my_script.sql -v TableName Users
(注意没有提供
SchemaName
)
我在终端上得到以下输出:
'SchemaName' scripting variable not defined.
The full table name is: [@SchemaName)].[Users]
如何修复此问题,以便如果变量未包含在
sqlcmd
参数中,我不会收到未定义的消息,并且完整的表名称为 [dbo].[Users]
?
我尝试更改默认值的位置,但仍然给出变量未定义消息,并且仍然给出相同的输出:
如果我更改变量检查:
IF @SchemaName IS NULL OR @SchemaName = '' OR @SchemaName = '$(SchemaName)'
BEGIN
SET @SchemaName = 'dbo'; -- Default to 'dbo' if not provided
END
...
我得到:
'SchemaName' scripting variable not defined.
The full table name is: [dbo)].[Users]
这是错误信息仍然包含在内。
我不知道如何解决这个问题。
我有一个几年前编写的模板引擎,用于将简单模板与包含实际值的 CSV 文件结合起来。 该工具可能适合您的情况。
这是我的模板引擎:
<#
.NOTES
Script: Expand-Csv Rev: 3.2
By: DGC Date: 2-21-19
.SYNOPSIS
Generates multiple expansions of a template,
driven by data in a CSV file.
.DESCRIPTION
This function is a table driven template tool.
It generates output from a template and
a driver table. The template file contains plain
text and embedded variables. The driver table
(in a csv file) has one column for each variable,
and one row for each expansion to be generated.
#>
function Expand-csv {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true)] [string] $driver,
[Parameter(Mandatory=$true)] [string] $template
)
Process {
Import-Csv $driver | % {
$_.psobject.properties | % {Set-variable -name $_.name -value $_.value}
Get-Content $template | % {$ExecutionContext.InvokeCommand.ExpandString($_)}
}
}
}
这是我的模板引擎的演示,有两个示例。 其中一个示例生成一个重复的 SQL 脚本,其中解析了变量数据。
<#
.SYNOPSIS
Produces sample results for Expand-csv
.NOTES
Script: Demo Rev: 1.3
By: DGC Date: 7-15-23
#>
# Example 1: Set up input files
@'
NAME,ID
John,18
Dave,19
Carmen,20
Eric,21
Tom,22
Lisa,23
Kyle,24
'@ | Out-File jars.csv
@'
java -jar --create -user $name -id $id -file D:/HR/$name-$id-form.pdf
'@ | Out-file jars.tmplt
' Example 1: CSV File'
' --------------------'
' '
Type Jars.csv
' '
' CSV Data viewed as a table'
' '
Import-Csv Jars.csv | Format-table -auto
' '
' Example 1: Template'
' --------------------'
' '
type Jars.tmplt
' '
' Example 1: Results'
' -------------------'
Expand-csv -Driver Jars.csv -Template Jars.tmplt
# Example 2: Set up input files
@'
privs,table,user
ALL,Employees,DBA
READ,Employees,Analyst
"READ, WRITE", Employees, Application
ALL,Departments,DBA
READ,Departments,"Analyst, Application"
'@ | Out-File Grants.csv
@'
grant $privs
on $table
to $user;
'@ | Out-File Grants.tmplt
' '
' '
' '
' Example 2: CSV File'
' --------------------'
' '
Type Grants.csv
' '
' CSV DAta viewed as a table'
' '
Import-Csv Grants.csv | Format-Table -auto
' '
' Example 2: Template'
' --------------------'
' '
type grants.tmplt
' '
' Example 2: Results'
' -------------------'
' '
Expand-csv -Driver Grants.csv -Template Grants.tmplt
' '
我还没有弄清楚如何将其应用到您的案例中。 也许你可以从这里拿走它。