Как я могу получить вывод приведенного ниже запроса в один результирующий набор в t-sql?

#tsql

#tsql

Вопрос:

У меня есть только разрешения «на чтение» для базы данных. Я пытаюсь извлечь данные из нескольких таблиц с одинаковыми полями. Я извлекаю имена таблиц из information_schema и помещаю их в переменную. Как я могу получить все данные из каждого выбранного в один результирующий набор?

 DECLARE @acct_code AS VARCHAR(40)
       ,@chk_tbl AS VARCHAR(40)

DECLARE CKTable_Cursor CURSOR FOR
    SELECT table_name
      FROM INFORMATION_SCHEMA.Tables
     WHERE table_name LIKE 'CK%'
       AND table_name > 'CK000000'
    ORDER BY TABLE_NAME

OPEN CKTable_Cursor

FETCH NEXT FROM CKTable_Cursor
  INTO @chk_tbl

SET @acct_code = SUBSTRING(@chk_tbl,3,LEN(@chk_tbl))

WHILE @@FETCH_STATUS = 0
    BEGIN

   EXEC    
         ('SELECT ck.inserteddatetime AS [Inserted Datetime]
                          ,actcode AS [Account Code]
                          ,actname AS [Account Name]
                          ,chk_num AS [Check Number]
                          ,payee AS [Payee]
                          ,supplier AS [Supplier]
                          ,balance AS [Balance]
                     FROM dbo.'    @chk_tbl   ' AS ck WITH (NOLOCK)
                    LEFT JOIN dbo.ChtActs AS coa WITH (NOLOCK)
                           ON CONVERT(VARCHAR(40),actcode) = '   @acct_code)

FETCH NEXT FROM CKTable_Cursor
    INTO @chk_tbl

SET @acct_code = SUBSTRING(@chk_tbl,3,LEN(@chk_tbl))

END

CLOSE CKTable_Cursor;
DEALLOCATE CKTable_Cursor;
 

Комментарии:

1. Советы: Наилучшая практика при сборке имен объектов в динамические операторы SQL — использовать QuoteName() , чтобы избежать проблем с нечетными именами, например New Table , с пробелом или зарезервированными словами, такими как From . @acct_code должен быть передан в качестве параметра.

2. Спасибо за советы! Я буду использовать их в будущем.

3. причина, по которой вы используете quotename, заключается в том, что ваше поле данных может содержать апостроф, который необходимо заменить на »