sql - 在存储过程中将查询作为参数传递

标签 sql sql-server

我有一个接受 nvarchar 的存储过程,但它将成为查询的一部分,如下所示:

Input Parameter @InputQuery =  '21 OR RevenueAccrualID =  22'

我想将输入查询添加到我现有的查询中:

UPDATE [RevenueAccrual] SET Posted=1
 Where [RevenueAccrual].RevenueAccrualID = @InputQueryPart

我想要的输出是:

UPDATE [RevenueAccrual] SET Posted=1
Where [RevenueAccrual].RevenueAccrualID = 21
OR RevenueAccrualID =  22

目前它所做的是:

 UPDATE [RevenueAccrual] SET Posted=1
 Where [RevenueAccrual].RevenueAccrualID = '21 OR RevenueAccrualID =  22' 

我想知道是否有办法将查询作为参数传递并在 SQL Server 中使用它。输入查询会因情况而异。

最佳答案

您需要将整个查询封装在字符串中 - 因此,如果您将 @InputQuery 传递给存储过程,那么它应该看起来像这样:

DECLARE @QueryString NVARCHAR(500)

SET @QueryString = 'UPDATE [RevenueAccrual] SET Posted=1 Where [RevenueAccrual].RevenueAccrualID = '
SET @QueryString = @QueryString + @InputQuery
EXEC (@QueryString)

所以它可以一次执行整个事情。但是,如果它始终是同一字段中使用 IN

的整数值,我可能会更改该方法
DECLARE @InputQuery NVARCHAR(30)
SET @InputQuery = '21, 22'
EXEC RunThisThang(@InputQuery)

然后你的存储过程看起来像这样:

CREATE PROCEDURE RunThisThang (@InputStr)
AS

DECLARE @QUeryStr NVARCHAR(500)

SET @QueryStr = 'UPDATE [RevenueAccrual] SET Posted=1 Where [RevenueAccrual].RevenueAccrualID IN (' + @InputStr + ')'
EXEC (@QueryStr)

关于sql - 在存储过程中将查询作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226688/

相关文章:

sql-server - VS2013 数据库项目 - 忽略匹配过滤器的模式/表?

c# - MVC 5 无法使用 Linq to SQL 类创建 Controller

向表添加字段的sql命令

sql - 复制同一表中的一行而无需键入 50 多个列名(同时更改 2 列)

php - MYSQL 为最后 5 条不同的记录选择 5 条记录

mysql - mysql查询中独立列的分组

sql-server - 如果在另一个表中找不到行,则将行插入到表中

SQL 多个外键作为主键

mysql - Coldfusion SQL 查询速度非常慢

sql - 在 SQL 中计算校验和