在我的数据库的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'而不是用逗号分隔表格。 –