【问题标题】:Executing the same SQL select for multiple parameters specified对指定的多个参数执行相同的 SQL 选择
【发布时间】:2017-02-20 15:40:44
【问题描述】:
哦,伟大的 SQL 专家,我有以下情况。我必须多次执行相同的选择,每次只有一个参数(S)更改,示例:
DECLARE @company1 varchar(25)
set @company1 = AA
然后运行以下命令:
Select * from sales where Company_Name = @company1
声明一个新的参数
set @company1 = BB
然后循环返回以运行查询。
这可能适用于几家公司,并且每次运行可能有几个参数。
所以我要做的就是指定一次查询,然后在顶部添加@companyX 声明。
谢谢
【问题讨论】:
标签:
sql-server
sql-server-2008
stored-procedures
【解决方案1】:
关于如何将数据提供给参数或查询的上下文信息很少,所以这里有一些选项。
创建一个存储过程,并多次调用:
-- Stored procedure
create procedure dbo.GetSalesByCompany
@companyName varchar(25)
AS
SET NOCOUNT ON;
Select * from sales where Company_Name = @company1;
--Usage
exec dbo.GetSalesByCompany 'AA';
exec dbo.GetSalesByCompany 'BB';
-- Usage with params
DECLARE @company1 varchar(25)
set @company1 = 'AA';
exec dbo.GetSalesByCompany @company1;
set @company1 = 'BB';
exec dbo.GetSalesByCompany @company1;
创建一个用户定义的表值函数。如果需要,可以从存储过程中调用它:
-- User defined table-valued function
Create Function dbo.udf_GetSalesByCompany
(@companyName varchar(25) )
RETURNS TABLE AS
RETURN Select * from sales where Company_Name = @company1;
--Usage
SELECT * FROM dbo.udf_GetSalesByCompany('AA');
SELECT * FROM dbo.udf_GetSalesByCompany('BB');
-- Usage with params
DECLARE @company1 varchar(25)
set @company1 = 'AA';
SELECT * FROM dbo.udf_GetSalesByCompany(@company1);
set @company1 = 'BB';
SELECT * FROM dbo.udf_GetSalesByCompany(@company1);
或者您使用“IN”语句来调用一次查询,用于多个过滤器值,在本例中为公司名称。
--Use and "IN" statement
Select * from sales where Company_Name IN('AA', 'BB')