У меня есть таблица с именем raw_data
, которая содержит столбец с большой строкой полей данных, отформатированных в строках фиксированной длины. У меня также есть таблица table_1
, которая определяет имя столбца и диапазон данных в строке для каждого значения. Мне нужно создать инструкцию SQL INSERT
для перемещения данных с raw_data
в таблицу с именем table_2
со всеми столбцами. table_1
имеет около 600 строк, поэтому мне интересно, могу ли я пропустить каждую запись, чтобы создать инструкцию SQL, которая вставляет данные в table_2
.Использование определения столбцов столбцов для создания запроса на ввод
Table_1
Name Start Length
AAA 1 2
BBB 3 3
CCC 6 1
Я не научился использовать курсоры; приведенный ниже запрос может быть неправильным. В этой задаче будет задействовано 3 таблицы. table_1
для поиска имени, начала, значений длины. table_2
будет таблицей, в которую мне нужно вставить данные. Третья таблица raw_data
имеет столбец с подстроками каждого необходимого значения.
DECLARE @SQL VARCHAR(200)
DECLARE @NAME VARCHAR(200)
DECLARE @START VARCHAR(200)
DECLARE @LENGTH VARCHAR(200)
SET @NAME = ''
DECLARE Col_Cursor CURSOR FOR
SELECT Name, Start, Length FROM ODS_SIEMENS_LAYOUT WHERE RecordType = '1'
OPEN Col_Cursor
FETCH NEXT FROM Col_Cursor INTO @NAME, @START, @LENGTH
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @NAME + '=' + 'SUBSTRING(RAW_DATA,' + @START + ',' + @LENGTH + ')'
FETCH NEXT FROM Col_Cursor INTO @NAME, @START, @LENGTH
END
CLOSE Col_Cursor
DEALLOCATE Col_Cursor
Мне нужно создать что-то вроде ниже запроса:
INSERT INTO TABLE_2
'AAA' = SUBSTRING(RAW_DATA,1,2)
'BBB' = SUBSTRING(RAW_DATA,3,3)
'CCC' = SUBSTRING(RAW_DATA,5,2)
........
Могу ли я цикл через каждую колонку, чтобы сформировать заявление SQL вместо ручного кодирования 600 столбцов?
Куда нужна петля? – Xedni
Стол с 600 колонками ??? Вы слышали о нормализации? –
Ну, абсурдно, что у вас 600 столбцов в одном столе. Это прямо выводит; «Грозный». Но вы можете использовать sys.columns, затем используйте курсор над таблицей temp, в которую вы можете выбрать их. – Hozikimaru