在我的數據庫的4個不同表格中找到數以千計的代碼。我已經創建了一個臨時表來插入所有的代碼和相應的表名,可以找到該代碼。作爲一個例子,我展示了臨時表的一小部分。使用動態查詢字符串連接多個表格
代碼 | table_name
DA | StatsCanCensus2011_1
DWAPT5L | StatsCanCensus2011_3
DWAPT5O | StatsCanCensus2011_3
DWDUP | StatsCanCensus2011_3
DWMOVA | StatsCanCensus2011_3
我想寫一個查詢,我可以動態地選擇代碼,並在選擇的代碼來自不同的表格時加入表格。我能夠輕鬆地爲2張桌子做到這一點,但是當有3張或4張時,它無法工作。
下面將給出的結果,我需要時2個表需要被接合:
declare @code nvarchar(15), @tblname nvarchar(30), @strSQL nvarchar(max), @strWhere nvarchar(max)
DECLARE db_cursor CURSOR FOR
select code, table_name from tmpVarList2
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @code, @tblname
set @strSQL='select'
WHILE @@FETCH_STATUS = 0
BEGIN
print @code + @tblname
set @[email protected] + ' ' + @code + ','
FETCH NEXT FROM db_cursor INTO @code, @tblname
END
set @strSQL=left(@strSQL, len(@strSQL)-1)
print @strSQL
CLOSE db_cursor
DEALLOCATE db_cursor
set @[email protected] + ' from'
set @strWhere=' where '
DECLARE db_cursor CURSOR FOR
select distinct table_name from tmpVarList2
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @tblname
WHILE @@FETCH_STATUS = 0
BEGIN
print @code + @tblname
set @[email protected] + ' ' + @tblname + ','
set @[email protected] + @tblname + '.da='
FETCH NEXT FROM db_cursor INTO @tblname
END
set @strSQL=left(@strSQL, len(@strSQL)-1)
set @strWhere=left(@strWhere, len(@strWhere)-1)
set @[email protected] + @strWhere
SELECT @strSQL
CLOSE db_cursor
DEALLOCATE db_cursor
結果:
select DA, DWAPT5L, DWAPT5O, DWDUP, DWMOVA
from StatsCanCensus2011_1, StatsCanCensus2011_3
where StatsCanCensus2011_1.da=StatsCanCensus2011_3.da
結果的實施例時,有3個表加入:
select DA, DWAPT5L, FMCLNOCH,FMCPINTO, FMCPSZAV, FMCPTIAV, FMCPTIME, FMHHTOT
from StatsCanCensus2011_1, StatsCanCensus2011_3, StatsCanNHS2011_4
where StatsCanCensus2011_1.da=StatsCanCensus2011_3.da=StatsCanNHS2011_4.da
我建議你重寫使用'JOIN ... ON'而不是用逗號分隔表格。 –