创建字符串的全局持久列表作为变量

时间:2015-09-08 00:12:14

标签: sql sql-server tsql sql-server-2008-r2

我在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之类的事情,但这样做的工作要比每次只输入客户编号更多。

我试图简化事情并使其对其他人更具可读性,而不是让它对数据库更有效率或更多"纠正"。

1 个答案:

答案 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可以很好地解释表变量的范围。