我有一个创建财务会计数据的长代码。
该代码使用多个联合将数据分解到不同的公司分组。
有 5-6 个帐户分组被多次引用。
每当分组发生变化时,我都必须检查代码并在每个位置进行更改。
字符串示例如下:
Where account in ('81000', '82000','87000','83600','67000')
and account like '814%'
有没有办法把它放在声明中,或者只是在其他 where 语句中内部链接到该代码?
我有一个创建财务会计数据的长代码。
该代码使用多个联合将数据分解到不同的公司分组。
有 5-6 个帐户分组被多次引用。
每当分组发生变化时,我都必须检查代码并在每个位置进行更改。
字符串示例如下:
Where account in ('81000', '82000','87000','83600','67000')
and account like '814%'
有没有办法把它放在声明中,或者只是在其他 where 语句中内部链接到该代码?
有几种方法可以执行您所描述的操作,最好取决于您的确切需求。
首先也是最简单的是使用变量。
declare @account1 int; set @account1 = 81000;
declare @account2 int; set @account2 = 82000;
declare @account3 int; set @account3 = 87000; /* and so forth*/
从您的问题中不清楚这是否是从前端应用程序调用的,如果是,您可以使用 sql 参数来设置帐户值。
string cmd =' declare @account1 int; set @account1 = @acount1In;
select columnslist from accounts where account in (@account1)
union
select columnslist from accounts where account in (@account1)
';
其次,您可以将值放入临时表或表变量中。
declare @accountIds table (account int);
insert into @accountIds values(81000);
select columnlist from accounts where account in (select account from @accounts);
最后,如果这确实是多次执行相同的表达式,您可以考虑使用公用表表达式。
;using cte as (select columnlist from accounts where account in (81000, 87000)
)
select columnlist from cte inner join table2 on a=b
union
select columnlist from cte inner join table3 on a=c