Tsql 声明我应该使用什么来引用同一程序中创建的字段

Tsql 声明我应该使用什么来引用同一程序中创建的字段,tsql,Tsql,我试图创建一个新字段,然后在我的程序引用中,在case语句中创建该新字段,但我似乎无法正确使用语法-我的错误消息说在“=”附近有一个错误 这是我的密码: declare @source_sys_obligation_id varchar(40); if facility_utilization in ('F') set source_sys_obligation_id = source_sys_facility_id else set source_sys_obligation_i

我试图创建一个新字段,然后在我的程序引用中,在case语句中创建该新字段,但我似乎无法正确使用语法-我的错误消息说在“=”附近有一个错误

这是我的密码:

declare @source_sys_obligation_id varchar(40);
if facility_utilization in ('F')  
    set source_sys_obligation_id = source_sys_facility_id
 else set source_sys_obligation_id = source_sys_utilization_num;
select
source_sys_utilization_num
,source_sys_id
,facility_utilization
,case when source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')
    then right('000000000000000' + substring(source_sys_obligation_id,6,10),16)

      when source_sys_id in ('MLSTLEND') 
    then  right('000000000000000' + left(source_sys_obligation_id,15),16)

    else '' end as No
from    BridgeUnderwrite.dbo.t_sag_pimsc1
where   source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND')
order by source_sys_id
;

该错误与set语句有关。它们应该看起来像:

if facility_utilization in ('F')
    set @source_sys_obligation_id = source_sys_facility_id 
else 
    set @source_sys_obligation_id = source_sys_utilization_num;

应该这样做:)。但是,源系统设施id和源系统利用率数量很可能是您的下一个问题。它们也是变量(或者可能是传入的参数)?

错误与set语句有关。它们应该看起来像:

if facility_utilization in ('F')
    set @source_sys_obligation_id = source_sys_facility_id 
else 
    set @source_sys_obligation_id = source_sys_utilization_num;

应该这样做:)。但是,源系统设施id和源系统利用率数量很可能是您的下一个问题。它们也是变量(或者传入的参数)吗?

名称的一部分是“@”。所有的T-SQL变量名或过程参数都必须以这个字符开头(我认为原因是它们很容易从表名和列名中辨别出来)。因此,您可能需要说
set@source\u sys\u responsibility\u id…
,而不是
set source\u sys\u responsibility\u id…

名称的一部分是“@”。所有的T-SQL变量名或过程参数都必须以这个字符开头(我认为原因是它们很容易从表名和列名中辨别出来)。所以你可能需要说
set@source\u sys\u responsibility\u id…
,而不是
set source\u sys\u responsibility\u id…
,你想要的和你能拥有的不一样!不能在选择语句中创建字段,然后在案例中的同一选择语句中引用该字段。您的代码毫无意义,并且严重缺乏对变量如何工作的理解

declare @source_sys_obligation_id varchar(40); 
if facility_utilization in ('F')   
    set source_sys_obligation_id = source_sys_facility_id 
 else set source_sys_obligation_id = source_sys_utilization_num; 
这不会向select添加列,甚至不会像其他人建议的那样添加@符号,因为这里没有select。此外,一个变量只能有一个值,每个记录不能有不同的值。所以,放弃整个方法。您真正需要的是一个派生表或CTE。您也可以简单地将第一种情况嵌入第二种情况。这样的事情可能会满足你的要求:

SELECT a.source_sys_utilization_num   
,a.source_sys_id   
,a.facility_utilization 
,CASE WHEN a.source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')   
    THEN RIGHT('000000000000000' + SUBSTRING(a.source_sys_obligation_id,6,10),16)   
      WHEN a.source_sys_id in ('MLSTLEND')    
    THEN  RIGHT('000000000000000' + LEFT(a.source_sys_obligation_id,15),16)   
    ELSE '' END AS [No]  
FROM 
(SELECT   
source_sys_utilization_num   
,source_sys_id   
,facility_utilization   
 ,CASE WHEN facility_utilization = 'F' THEN source_sys_facility_id
 ELSE source_sys_utilization_num END AS source_sys_obligation_id
FROM    BridgeUnderwrite.dbo.t_sag_pimsc1   
WHERE   source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND'))  a 
ORDER BY source_sys_id   

太忙,无法编写其他版本。也许其他人会提供。

你想要的和你能拥有的是不一样的!不能在选择语句中创建字段,然后在案例中的同一选择语句中引用该字段。您的代码毫无意义,并且严重缺乏对变量如何工作的理解

declare @source_sys_obligation_id varchar(40); 
if facility_utilization in ('F')   
    set source_sys_obligation_id = source_sys_facility_id 
 else set source_sys_obligation_id = source_sys_utilization_num; 
这不会向select添加列,甚至不会像其他人建议的那样添加@符号,因为这里没有select。此外,一个变量只能有一个值,每个记录不能有不同的值。所以,放弃整个方法。您真正需要的是一个派生表或CTE。您也可以简单地将第一种情况嵌入第二种情况。这样的事情可能会满足你的要求:

SELECT a.source_sys_utilization_num   
,a.source_sys_id   
,a.facility_utilization 
,CASE WHEN a.source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS')   
    THEN RIGHT('000000000000000' + SUBSTRING(a.source_sys_obligation_id,6,10),16)   
      WHEN a.source_sys_id in ('MLSTLEND')    
    THEN  RIGHT('000000000000000' + LEFT(a.source_sys_obligation_id,15),16)   
    ELSE '' END AS [No]  
FROM 
(SELECT   
source_sys_utilization_num   
,source_sys_id   
,facility_utilization   
 ,CASE WHEN facility_utilization = 'F' THEN source_sys_facility_id
 ELSE source_sys_utilization_num END AS source_sys_obligation_id
FROM    BridgeUnderwrite.dbo.t_sag_pimsc1   
WHERE   source_sys_id in ('AFSEAST','AFSLSAL','DFBDOM','ACBS','MLSTLEND'))  a 
ORDER BY source_sys_id   
太忙,无法编写其他版本。也许其他人会提供