2017-02-20 64 views
1

噢伟大的SQL专家,我有以下场景。我到同一选择,多次和仅一个参数(S)做每次都变化,实施例:为指定的多个参数执行相同的SQL选择

DECLARE @company1 varchar(25) 
set @company1 = AA 

然后运行以下:

Select * from sales where Company_Name = @company1 

声明新paramater

set @company1 = BB 

并循环运行查询。

这可能适用于少数公司,也可能是每次运行的几个参数。 因此,我想要做的只是指定一次查询,并在顶部添加@companyX声明。

感谢

+0

参数如何填充不同的值?你能展示你的整个过程吗? –

回答

0

有一个在上的数据是如何提供的参数或查询所以这里有一些选择上下文中的问题的资料很少。

创建存储过程,并调用它多次:

-- 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')