Sql Powershell:将文件路径指定为变量

Sql Powershell:将文件路径指定为变量,sql,tsql,powershell,csv,powershell-ise,Sql,Tsql,Powershell,Csv,Powershell Ise,我正在通过powershell脚本运行以下SQL查询,需要针对不同的文件多次运行该脚本。所以我想弄清楚的是,在运行脚本时,如何将文件路径指定为变量 update [$Db_name].[dbo].[$BatchTable] set [$Db_name].[dbo].[$BatchTable].Wave = 'Wave1.1' from [$Db_name].[dbo].[$BatchTable] inner join OPENROWSET(BULK 'FilePath\file.csv',

我正在通过powershell脚本运行以下SQL查询,需要针对不同的文件多次运行该脚本。所以我想弄清楚的是,在运行脚本时,如何将文件路径指定为变量

update [$Db_name].[dbo].[$BatchTable]
set [$Db_name].[dbo].[$BatchTable].Wave = 'Wave1.1'
from [$Db_name].[dbo].[$BatchTable]
inner join OPENROWSET(BULK 'FilePath\file.csv',    
FORMATFILE= 'E:\import.xml') AS a
on ([$Db_name].[dbo].[$BatchTable].Name= a.Name) and  
([$Db_name].[dbo].[$BatchTable].Domain = a.Domain)
“FilePath\file.csv”是我需要定义为变量的文件路径,这样我的代码就会变成这样:

inner join OPENROWSET(BULK '$INPUTFILEPATH',    
FORMATFILE= 'E:\import.xml') AS a
任何帮助或可能更好的方法来实现这一点都会非常有帮助

通过命令like,我希望能够像这样运行脚本:

inner join OPENROWSET(BULK '$INPUTFILEPATH',    
FORMATFILE= 'E:\import.xml') AS a
CMD:updatescript.ps1$INPUTFILEPATH=C:\Documents\myfile.csv


再说一次,我不确定这是最好的方法

您可以使用
param
将命令行参数传递给powershell脚本

例如:

param(
   [string]$INPUTFILEPATH
)
然后按如下方式调用脚本:

updatescript.ps1 -INPUTFILEPATH C:\Documents\myfile.csv
有关cmd行参数的更多详细信息,请参见

您就快到了。 您需要在脚本的最开始添加一个参数块,例如

Param( 
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType 'leaf'})]  
[string] $InputFilePath  
)
这将创建一个强制(非可选)字符串参数,称为
InputFilePath
,而
ValidateScript
是用于验证参数的代码,在这种情况下,使用
测试路径
cmdlet和叶的路径类型检查文件是否存在(如果检查目录是否存在,请使用
'container'

运行脚本时,请使用以下语法:

updatescript.ps1 -INPUTFILEPATH "C:\Documents\myfile.csv"
在脚本中,使用变量作为路径,与您的问题完全相同:

inner join OPENROWSET(BULK '$INPUTFILEPATH',    
FORMATFILE= 'E:\import.xml') AS a
注意:在powershell中运行脚本时使用参数时,您只需使用最少的字符即可从参数块中的所有其他参数中唯一标识该参数-在这种情况下,
-I
-InputFilePath
一样有效