Sql 如何声明数据字符串

Sql 如何声明数据字符串,sql,sql-server-2008,declare,Sql,Sql Server 2008,Declare,我有一个很长的代码来创建财务会计数据 该代码使用多个联合将数据分发给不同的公司分组 有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

其中('81000'、'82000'、'87000'、'83600'、'67000')中的帐户和类似于'814%'的帐户将永远不会匹配任何内容,应该是
还是
?在任何情况下,为什么不将帐户组添加到帐户表中?根据设置,您可以为这些组创建“搜索表”,然后使用子查询。否则,您将需要使用动态sql和某种形式的查找……是的,它应该是一个或抱歉。