我在MS SQL Server Management Studio中使用SQL Server 2008 R2。我只做了选择和所有标准的东西,但我发现自己经常使用相同的字符串列表进行不同的查询,我希望能够构建包含它们的变量。我没有创建新表的访问权限,否则我会这样做。这甚至可能吗?
让我们说我有一堆客户端号码,我想用它们只包含他们的客户帐号数据和查询,例如:
SELECT * FROM SALES
WHERE CLIENTNUMBER IN ('123','456','789')
有没有办法创建一个容纳这3个值的变量,所以我只能说
SELECT * FROM SALES
WHERE CLIENTNUMBER IN @CLOTHING_CLIENTS
当然,列表超过3个客户端号码。并且有不同的类别等我认为作为一个单独的表做更简单,但当然我没有能力创建新表。我也可以做JOIN
之类的事情,但这样做的工作要比每次只输入客户编号更多。
我试图简化事情并使其对其他人更具可读性,而不是让它对数据库更有效率或更多"纠正"。
答案 0 :(得分:0)
有几种方法可以解决临时表或表变量。尝试这样的事情:
declare @CLOTHING_CLIENTS table (ClientNumber varchar(20) not null);
-- Your list of values goes here
insert into @CLOTHING_CLIENTS (ClientNumber)
values ('123')
,('456')
,('789');
select * from Sales
where ClientNumber in (select ClientNumber from @CLOTHING_CLIENTS);
@CLOTHING_CLIENTS变量可以在创建它的同一批次中的任何位置再次使用。This post可以很好地解释表变量的范围。