【问题标题】:How can I execute a SQL Server stored procedure from a Batch file and get the Output parameter value?如何从批处理文件执行 SQL Server 存储过程并获取输出参数值?
【发布时间】:2020-05-30 16:29:51
【问题描述】:

我有这个带有输出参数的 SQL Server 存储过程

PROCEDURE [dbo].[test]
    @outputx int output
AS
    SELECT @outputx = 123

当我在 SQL Server Management Studio 中运行它时,它返回 123:

DECLARE @outputx int
EXEC test @outputx output

SELECT @outputx  --> returns 123

我需要从批处理文件或 PowerShell 中调用此存储过程。

我在.BAT 文件中使用此代码(我使用OSQL):

SET tempfile = "C:\myFolder\tempfile.txt"
SET outputx = 0
SET Cmd = EXEC test @outputx output;
SET Cmd = "%Cmd%"

OSQL -S myDBServer -d myDbName -E -e -p -b -Q %Cmd% >%tempfile%

当我检查tempfile.txt 时,它说:

消息 137,级别 15,状态 2,服务器 myDBServer,第 1 行
必须声明标量变量“@outputx”。
EXEC 测试@outputx 输出;

如何从批处理文件执行 SQL Server 存储过程并获取输出参数值?

谢谢

【问题讨论】:

  • cmd.exe 的正确语法,即您的批处理文件,应该是 SET "tempfile=C:\myFolder\tempfile.txt"SET "outputx=0"SET "cmnd=EXEC test @outputx output;"OSQL -S myDBServer -d myDbName -E -e -p -b -Q "%cmnd%" >"%tempfile%"请注意,这不是您问题的答案,只是您作为自己的批处理文件代码发布的内容的正确语法。

标签: sql-server powershell batch-file cmd sql-server-2012


【解决方案1】:

您是否尝试过用于 PowerShell 的 SqlServer 模块?安装该模块后,您可以访问 Invoke-SqlCmd cmdlet。您可以使用此 cmdlet 检索将在 SQLMgr 中运行的任何内容。

$ReturnValue = invoke-sqlcmd -ServerInstance $ServerInstance -Database $Database -Query $QueryString

该模块中还有其他命令,包括读取和写入表和视图的命令。

希望对你有所帮助。

【讨论】:

  • 我需要使用集成安全(可信连接),而不是使用用户名和密码。我可以用 sqlcmd 做到这一点吗? docs.microsoft.com/en-us/sql/tools/… 表示“-G 选项仅适用于 Azure SQL 数据库和 Azure 数据仓库”。
  • 我没有使用 Integrated Security 的个人经验,但是请查看 the Microsoft documentation site for Invoke-SqlCmd 上的 Example #9,其中提到了 Integrated Security=True。
  • 谢谢。我试过了,它给了我错误“找不到与参数名称'ConnectionString'匹配的参数。但是,在cmd中使用“-E”似乎有效:sqlcmd -Q“SELECT COUNT(*) AS Count FROM myTbl" -SMyServer -dMyDB -E
猜你喜欢
  • 2012-10-10
  • 2018-06-23
  • 2017-04-05
  • 2019-02-03
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多