2014-01-03 2 views
0

У меня есть запрос, который выбирает из нескольких таблиц с помощью соединения. Я хочу выполнить этот запрос из разных баз данных через цикл.Выберите UNION из нескольких таблиц с помощью переменной

я достиг, что с помощью упрощенного (запроса):

DECLARE @intCounter int 
SET @intCounter = 1 

DECLARE @tblBedrijven TABLE (ID int identity(1,1), 
         CompanyName varchar(20), 
         DatabaseTable varchar(100)) 
INSERT INTO @tblBedrijven VALUES ('001-CureCare', '<TABLE/ DATABASE1> AUS'), 
          ('002-Cleaning', '[global_nav5_prod].[dbo].<TABLE/ DATABASE2>] AUS') 
DECLARE @strCompany varchar(20) 
DECLARE @strTable varchar(100) 

WHILE (@intCounter <= (SELECT MAX(ID) FROM @tblBedrijven)) 
BEGIN 
    SET @strTable = (SELECT DatabaseTable FROM @tblBedrijven 
       WHERE ID = @intCounter) 
    SET @strCompany = (SELECT CompanyName FROM @tblBedrijven 
       WHERE ID = @intCounter) 
    EXEC('SELECT ''' + @strCompany + ''' as Company, 
     AUS.[User], 
     AUS.[E-mail] 
    FROM' + @strTable) 
    SET @intCounter = @intCounter + 1 
END 

Моя проблема заключается в том, что в результате создает отдельные таблицы 2 (для каждого цикла). Я хочу объединить результаты, но понятия не имею.

Любые предложения?

Заранее спасибо.

ответ

0

Не можете ли вы использовать что-то вроде приведенного ниже кода, в котором вы присоедините все sqls с объединением и, наконец, выполните sql один раз, не выполняя в цикле. Я не являюсь экспертом в SQL Server, но я написал много других подобных хранимых процедур, используя другие РСУБД. Поэтому, пожалуйста, несите никаких синтаксических ошибок.

DECLARE @intCounter int 
DECLARE @maxId int 
SET @intCounter = 1  

DECLARE @tblBedrijven TABLE (ID int identity(1,1), 
         CompanyName varchar(20), 
         DatabaseTable varchar(100)) 
INSERT INTO @tblBedrijven VALUES ('001-CureCare', '<TABLE/ DATABASE1> AUS'), 
          ('002-Cleaning', '[global_nav5_prod].[dbo].<TABLE/ DATABASE2>] AUS') 
DECLARE @strCompany varchar(20) 
DECLARE @strTable varchar(100) 
DECLARE @strSql varchar(5000) 
SET @maxId = (SELECT MAX(ID) FROM @tblBedrijven) 

WHILE (@intCounter <= @maxId) 
BEGIN 

    SET @strTable = (SELECT DatabaseTable FROM @tblBedrijven 
       WHERE ID = @intCounter) 
    SET @strCompany = (SELECT CompanyName FROM @tblBedrijven 
       WHERE ID = @intCounter) 
    SET @strSql = @strSql + ('SELECT ''' + @strCompany + ''' as Company, 
     AUS.[User], 
     AUS.[E-mail] 
    FROM' + @strTable) 
    IF @intCounter < @maxId THEN 
    BEGIN 
     SET @strSql = @strSql + ' UNION ' 
    END 
    SET @intCounter = @intCounter + 1  
END 

EXEC(@strSql) 
+0

Благодарим за ответ, но ответ на этот вариант (затронутый 2-й ряд (-ы)) вместо того, чтобы вернуть фактический результат. Поэтому по какой-то причине это не выполняется, как должно. – user3156322

Смежные вопросы