我的库存数据为.CSV(共500 CSV)。我的目标是创建一个包含多个名为“ A”,“ B”的表的数据库,其中A和B指的是两种不同的股票。 我已经在数据库中加载了一个表,该表包含具有所有500个符号的列。
我想遍历每一行,以便可以读取CSV并在数据库中为该股票创建一个表。例如,如果符号表中的第一行是“ A”,那么我想通过读取一个名为“ /path/A.csv”的csv文件在数据库中创建一个名为A的表。
所有表都具有相同的结构。有四列:“日期”,“打开”,“高”,“低”,“关闭”,“交易量”
我为一只股票创建了一张桌子。例如,对于股票A,使用以下代码
create table A(
[Date] datetime2(7) NOT NULL,
[Open] float NULL,
High float NULL,
Low float NULL,
[close] float NULL,
Volume float NULL
)
BULK INSERT A
FROM 'D:\ASX\A.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
由于无法手动将名称从A更改为B,然后再更改为C,直到达到500,因此我想知道如何从符号表中迭代500行,以便对于每次迭代,我的上述代码从A更改为B到C等。
答案 0 :(得分:0)
以下是一种使用现有设计为符号表中的每个股票代号创建和导入数据的方法。
export default connect(mapStateToProps)(PrivateRoute);
我建议您重新考虑此设计,并创建一个带有股票代号的单个表,并将所有文件导入到一个表中。下面是此方法的示例:
DECLARE @Path nvarchar(255) = 'D:\ASX';
DECLARE @SQL nvarchar(MAX);
SET @SQL = (SELECT N'
CREATE TABLE dbo.' + QUOTENAME(ticker) + N'(
[Date] datetime2(7) NOT NULL,
[Open] float NULL,
High float NULL,
Low float NULL,
[close] float NULL,
Volume float NULL
);
BULK INSERT ' + QUOTENAME(ticker) + N'
FROM ''' + @Path + N'\' + ticker + N'.csv''
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '','', --CSV field delimiter
ROWTERMINATOR = ''\n'', --Use to shift the control to next row
TABLOCK
);'
FROM dbo.symbols
FOR XML PATH(''), TYPE).value('.',N'nvarchar(MAX)');
EXECUTE sp_executesql @SQL;
GO