当前位置:  开发笔记 > 前端 > 正文

如何将参数值传递给T-SQL查询

如何解决《如何将参数值传递给T-SQL查询》经验,为你挑选了1个好方法。

我在SQL Server 2005(Management Studio IDE)中使用以下T-SQL查询:

DECLARE @id int;
DECLARE @countVal int;
DECLARE @sql nvarchar(max);
SET @id = 1000;
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = @id';
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle

我不知道如何将输入参数@id传递给EXEC查询,并将计数结果传递给@countVal.我看到了一些Microsoft SQL服务器的例子:

EXEC (@sql, @id = @id)

我为Oracle尝试了这个,但是我收到了一条语句错误:

OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer" 
returned message "ORA-00936: missing expression"

Jim Counts.. 17

试试这个:

EXEC sp_executesql @sql, N'@id int', @id

更多信息在这篇伟大的文章:http://www.sommarskog.se/dynamic_sql.html


至于输出,你的SELECT需要看起来像这样:

SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id

我选择'id'而不是'*'来避免不必要的数据...

然后你的动态SQL应该是这样的:

EXEC sp_executesql @sql, 
                   N'@id int, @countVal int OUTPUT', 
                   @id, 
                   @countVal OUTPUT

此示例改编自上面链接的相同文章,在sp_executesql部分中.


至于您的Oracle错误,您需要找出sp_executesql发送给Oracle的确切SQL.如果Oracle中有分析器或查询日志,那可能会有所帮助.我对Oracle的经验有限,但这将是解决问题的下一个合乎逻辑的步骤.



1> Jim Counts..:

试试这个:

EXEC sp_executesql @sql, N'@id int', @id

更多信息在这篇伟大的文章:http://www.sommarskog.se/dynamic_sql.html


至于输出,你的SELECT需要看起来像这样:

SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id

我选择'id'而不是'*'来避免不必要的数据...

然后你的动态SQL应该是这样的:

EXEC sp_executesql @sql, 
                   N'@id int, @countVal int OUTPUT', 
                   @id, 
                   @countVal OUTPUT

此示例改编自上面链接的相同文章,在sp_executesql部分中.


至于您的Oracle错误,您需要找出sp_executesql发送给Oracle的确切SQL.如果Oracle中有分析器或查询日志,那可能会有所帮助.我对Oracle的经验有限,但这将是解决问题的下一个合乎逻辑的步骤.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有