我有4张桌子A,B,C和X.
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
A 表格:
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
C 表:
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
我需要将 X Trade_ID
表找到表A,B和C.如果在表A中找到,则打印位置列INDIA
,如果在表B中找到然后打印位置列USA
,如果在表C中找到,则Hongkong
表位置,Trade_Id,名称列中的位置列为#Temp
:
#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 '+@tablename+' Where Trade_Id = '+@Fst_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 :(得分: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