2017-08-31 121 views
0

我有4个表A,B,C和X动态SQL查询

X表:

Icid Trade_Id Counter_Party 
--------------------------------- 
1   101  HDFC1 
2   102  HDFC1 
3   103  HDFC2 
4   104  HDFC2 
5   105  HDFC2 
6   106  HDFC3 
7   107  HDFC4 
8   108  HDFC4 
9   109  HDFC5 
10  110  HDFC5 

表:

Icid Trade_Id  Name 
---------------------------------- 
1  110   HDFC Bank Pvt Ltd 
2  105   HDFC Bank Pvt Ltd 
3  101   HDFC Bank Pvt Ltd 
4  102   HDFC Bank Pvt Ltd 

B表:

Icid Trade_Id Name 
---------------------------------------- 
1  103  HSBC Pvt Ltd 
2  104  HSBC Pvt Ltd 
3  106  HSBC Pvt Ltd 

Ç表:

Icid Trade_Id Name 
-------------------------------------- 
1  107  HK Pvt Ltd 
2  108  HK Pvt Ltd 
3  109  HK Pvt Ltd 

A,B,C表这样,我已创建的另一个表,并存储表如下名称。

Findtbl表:

Icid Table_name 
    ------------------ 
    2  A 
    3  B 
    4  C 

我需要表XTrade_ID找到表A,B和C.如果表A中,然后打印位置列INDIA,如果表B中发现然后打印位置列USA,如果在表C中找到,那么位置列在表#Temp位置,Trade_Id,名称列Hongkong

#TEMP表:

Icid location Trade_Id Name 

我尝试这样做:

Declare @Fst_value nvarchar(100) 
Declare @Counter INT 
Declare @tablename nvarchar(20) 
Declare @sql nvarchar(max) 
Declare @isvalue int 
Declare @loop int = 1 
Declare @sqlsecond nvarchar(max) 
Declare @sqlthird nvarchar(max) 

SET @Fst_value = '104' 
SET @Counter = (Select COUNT(Icid) From Findtbl) 

WHILE @Loop < = @Counter 
BEGIN 
    SET @tablename = (SELECT Table_name 
         FROM Findtbl 
         WHERE Icid = @Loop) 
    SET @sql = 'Select @isvalue = Icid,@sqlsecond = Trade_Id,@sqlthird = Name From '[email protected]+' Where Trade_Id = '[email protected]_value+'' 

    Execute sp_executesql @sql,N'@isvalue int OUTPUT,@sqlsecond nvarchar OUTPUT,@sqlthird nvarchar OUTPUT',@isvalue = @isvalue OUT,@sqlsecond = @sqlsecond OUT,@sqlthird = @sqlthird OUT 

    if(@isvalue <> 0) 
    begin 
     Select @sql 
     break 
    end 

    SET @isvalue = 0 
    SET @Loop = @Loop + 1 
END 

该代码包含在存储的过程。

回答

0

虽然您可能需要花一些时间重新陈述您的问题,但我会给它一个机会。我将不得不忽略过程代码,并使用基于集合的代码。

insert into #temp (Icid, location, Trade_Id, Name) 
select case 
    when A.Trade_ID is not null then A.Icid 
    when B.Trade_ID is not null then B.Icid 
    when C.Trade_ID is not null then C.Icid 
end 
,case 
    when A.Trade_ID is not null then 'INDIA' 
    when B.Trade_ID is not null then 'USA' 
    when C.Trade_ID is not null then 'Hongkong' 
end 
,case 
    when A.Trade_ID is not null then A.Trade_ID 
    when B.Trade_ID is not null then B.Trade_ID 
    when C.Trade_ID is not null then C.Trade_ID 
end 
,case 
    when A.Trade_ID is not null then A.Name 
    when B.Trade_ID is not null then B.Name 
    when C.Trade_ID is not null then C.Name 
end 
from X 
left outer join A on X.Trade_ID on A.Trade_ID 
left outer join B on X.Trade_ID on B.Trade_ID 
left outer join C on X.Trade_ID on C.Trade_ID