我有一个名为raw_data
的表,其中包含一个列,其中包含一系列以固定长度子字符串格式化的数据字段。我还有一个表table_1
,它为每个值指定列名和字符串中的数据范围。我需要创建一个SQL INSERT
语句,将数据从raw_data
移动到一个名为table_2
的表中,并包含所有列。 table_1
有大约600行,所以我想知道是否可以遍历每条记录来创建将数据插入table_2
的SQL语句。
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列吗?
答案 0 :(得分:1)
啊,我想我开始解开你想要做的事情。这里根本不需要游标或动态sql。您只需要使用select语句作为插入的值。这样的事可能吗?
INSERT INTO TABLE_2(AAA, BBB, CCC)
SELECT SUBSTRING(RAW_DATA,1,2)
, SUBSTRING(RAW_DATA,3,3)
, SUBSTRING(RAW_DATA,5,2)
FROM ODS_SIEMENS_LAYOUT
WHERE RecordType = '1'
答案 1 :(得分:1)