如何通过PowerShell运行服务器上含特殊字符的长SQL文件?
解决PowerShell执行长SQL语句(含特殊字符)的问题
问题场景
当前通过PowerShell的Invoke-Sqlcmd直接传入拼接的SQL查询时,因语句过长且包含&、@、$、#等特殊字符导致执行失败,现有代码如下:
commands = f'Invoke-Sqlcmd -Query "{query}"' output = execute_powershell(settings.PORT1, settings.USER1, settings.PASSWORD, commands)
示例SQL语句:
update [tableA] set [columnC] = '{Json values here}' where [columnD] like '%someValue%'
解决方案:运行服务器本地的SQL文件
直接调用服务器上的SQL文件是规避长语句和特殊字符问题的最优方案,具体操作如下:
1. 整理SQL语句到本地.sql文件
把所有需要执行的UPDATE、INSERT语句整理到一个(或多个).sql文件中,比如保存到服务器的D:\sql_scripts\batch_ops.sql路径下,确保执行PowerShell命令的账号对该路径有读取权限。
2. 修改PowerShell命令调用SQL文件
使用Invoke-Sqlcmd的-InputFile参数替代-Query,直接指定SQL文件路径,无需再处理语句中的特殊字符和长度限制:
# 构造调用SQL文件的PowerShell命令 commands = 'Invoke-Sqlcmd -InputFile "D:\sql_scripts\batch_ops.sql"' output = execute_powershell(settings.PORT1, settings.USER1, settings.PASSWORD, commands)
3. 额外注意事项
- 如果SQL文件路径包含空格,必须用双引号完整包裹路径
- 若需要指定目标数据库,可添加
-Database参数,示例:Invoke-Sqlcmd -InputFile "D:\sql_scripts\batch_ops.sql" -Database "YourTargetDB" - 若要执行多个SQL文件,可通过循环遍历文件路径依次执行,或合并所有语句到单个文件中
内容的提问来源于stack exchange,提问作者Tal Angel
相关产品推荐
相关产品推荐

