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

Sql server 如何从批处理文件执行SQL Server存储过程并获取输出参数值?,sql-server,powershell,batch-file,cmd,sql-server-2012,Sql Server,Powershell,Batch File,Cmd,Sql Server 2012,我有一个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 我需要从批处理文件或Power

我有一个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:

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

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

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


谢谢

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

$ReturnValue = invoke-sqlcmd -ServerInstance $ServerInstance -Database $Database -Query $QueryString
该模块中还有其他命令,包括读取和写入表和视图的命令


我希望这对您有所帮助。

我需要使用集成安全可信连接,而不是使用用户名和pwd。我可以用sqlcmd做这个吗?表示-G选项仅适用于Azure SQL数据库和Azure Data Warehouse。我个人没有使用集成安全性的经验,但是请查看示例9,其中提到了Integrated Security=True。谢谢。我试过了,但它给了我一个错误:找不到与参数名“ConnectionString”匹配的参数。但是,在cmd中使用-E似乎有效:sqlcmd-QSELECT COUNT*AS COUNT FROM myTbl-SMyServer-dMyDB-etcmd.exe的正确语法,即批处理文件,将设置为tempfile=C:\myFolder\tempfile.txt,设置outputx=0,设置cmnd=EXEC test@outputxoutput;,和OSQL-S myDBServer-d myDbName-E-E-p-b-Q%cmnd%>%tempfile%。注意,这不是对您问题的回答,只是您发布的批处理文件代码的正确语法。
$ReturnValue = invoke-sqlcmd -ServerInstance $ServerInstance -Database $Database -Query $QueryString