2014-09-04 115 views
-2
Declare @identifier nvarchar(100), 
     @identifier_New nvarchar(100) 
Declare identifier cursor for 
    select distinct Identifier01 
    from update_rules 
    where Identifier01 is not null 
      and Vendor='Bloomberg' 
      and [Geneva Code]='Geneva77' 

open identifier 

    fetch next from identifier into @identifier 

    while @@fetch_status=0 
    begin 
     set @identifier_New=upper(substring(@identifier,2,len(@identifier)-2)) 

     if exists(select * from INFORMATION_SCHEMA.columns where table_name='investment' and [email protected]_New) 
     begin 
      update i set i.[BBG Final Identifier]=case when [email protected] then @identifier_New end 
      FROM investment i,update_rules u 
      where isnull(i.AType,'0')=isnull(u.[Asset Type],'0') and 
        isnull(i.IType,'0')=isnull(u.[Investment Type],'0') and 
        isnull(i.Under_AType,'0')=isnull(u.[Under Lying Asset Type],'0') and 
        isnull(i.Under_IType,'0')=isnull(u.[Under Lying Investment Type],'0') and 
        u.Vendor='Bloomberg' and u.[Geneva Code]='Geneva77' 
     end 
     fetch next from identifier into @identifier 
    end 
close identifier 
deallocate identifier 

我得到一个错误,她SQL UPDATE查询逻辑

update i set i.[BBG Final Identifier]=case when [email protected]**identifier** then @identifier_New end 
    FROM investment i,update_rules u 
+3

这看起来像SQL服务器。你应该适当地标记问题。 – 2014-09-04 12:24:58

+2

您能否请格式化您的代码,以便它可读并用实际的错误消息更新您的问题?我们无法帮助您解决一个模糊不清的问题。 – Josien 2014-09-04 12:25:12

+1

什么是错误? – 2014-09-04 12:26:26

回答

0

这是您的查询:

 update i set i.[BBG Final Identifier]=case when [email protected] then @identifier_New end 
     FROM investment i, update_rules u 
     where isnull(i.AType,'0')=isnull(u.[Asset Type],'0') and 
       isnull(i.IType,'0')=isnull(u.[Investment Type],'0') and 
       isnull(i.Under_AType,'0')=isnull(u.[Under Lying Asset Type],'0') and 
       isnull(i.Under_IType,'0')=isnull(u.[Under Lying Investment Type],'0') and 
       u.Vendor='Bloomberg' and u.[Geneva Code]='Geneva77'; 

首先,你应该使用显式join S,而不是隐含在加入where条款。 SQL Server只允许从一个表进行更新,因此您不在set的受让方处使用表别名。

试着写了这样的查询:

update i 
    set [BBG Final Identifier] = (case when u.Identifier01 = @identifier 
             then @identifier_New 
            end) 
    from investment i join 
     update_rules u 
     on isnull(i.AType,'0') = isnull(u.[Asset Type],'0') and 
      isnull(i.IType,'0') = isnull(u.[Investment Type],'0') and 
      isnull(i.Under_AType,'0') = isnull(u.[Under Lying Asset Type],'0') and 
      isnull(i.Under_IType,'0') = isnull(u.[Under Lying Investment Type],'0') 
    where u.Vendor='Bloomberg' and u.[Geneva Code]='Geneva77'; 
+0

更新i set [BBG最终标识符] =(当u.Identifier01 = @标识符 然后i。@ identifier_New – user3751161 2014-09-04 12:33:59