임 지금까지 내가이 있고, SQL 서버로 CSV 파일을 가져 오는 대량의 프로세스를 자동화하려고 :TSQL - 컬럼의 레코드를 기반으로 테이블 컬럼을 작성
이----Allow for SQL to use cmd shell
--EXEC sp_configure 'show advanced options', 1 -- To allow advanced options to be changed.
--RECONFIGURE -- To update the currently configured value for advanced options.
--EXEC sp_configure 'xp_cmdshell', 1 -- To enable the feature.
--RECONFIGURE -- To update the currently configured value for this feature.
SET NOCOUNT ON
--Loop through all of the files
CREATE TABLE #tmp(excelFileName VARCHAR(100));
CREATE TABLE #tmpCol(col NVARCHAR(MAX));
INSERT INTO #tmp
EXEC xp_cmdshell 'dir /B "C:\Users\owain.esau\OneDrive\Work\Companies\IronSude\backupFiles\"';
DECLARE @fileName varchar(100)
DECLARE @tableName varchar(MAX)
DECLARE @sql varchar(MAX)
While (Select Count(*) From #tmp where excelFileName is not null) > 0
Begin
Select Top 1 @fileName = excelFileName From #tmp
SET @sql = 'BULK INSERT #tmpCol FROM "C:\Users\owain.esau\OneDrive\Work\Companies\IronSide\backupFiles\' + @filename + '" WITH (ROWTERMINATOR = '','', LASTROW = 1)'
EXEC (@sql)
UPDATE #tmpCol SET col = REPLACE(col, '"', '')
UPDATE #tmpCol SET col = REPLACE(col, ' ', '')
SET @tableName = LEFT(@filename, LEN(@filename) -4)
CREATE TABLE @tableNAme ()
Delete from #tmp Where excelFileName = @FileName
End
DROP TABLE #tmp
DROP TABLE #tmpCol
@sql
대량 삽입은 열을 가져옵니다을 헤더를 필요로하지만, 실제로 이것을 CREATE TABLE
문에 전달하는 방법을 파악할 수 없습니다.
도움이 될 것입니다.
----- 편집 ---------------------------------------- -----------
제가 결국 다음 (I는 루프에 넣어)을 동적 SQL을 사용 CREATE TABLE을 변경 한 후 :
가----Allow for SQL to use cmd shell
--EXEC sp_configure 'show advanced options', 1 -- To allow advanced options to be changed.
--RECONFIGURE -- To update the currently configured value for advanced options.
--EXEC sp_configure 'xp_cmdshell', 1 -- To enable the feature.
--RECONFIGURE -- To update the currently configured value for this feature.
SET NOCOUNT ON
--Loop through all of the files
CREATE TABLE #tmp(excelFileName VARCHAR(100));
CREATE TABLE #tmpCol(col NVARCHAR(MAX));
INSERT INTO #tmp
EXEC xp_cmdshell 'dir /B "C:\Users\owain.esau\OneDrive\Work\Companies\IronSude\backupFiles\"';
DECLARE @fileName varchar(100)
DECLARE @tableName varchar(MAX)
DECLARE @colName varchar(MAX)
DECLARE @sql varchar(MAX)
DECLARE @sql2 varchar(max)
While (Select Count(*) From #tmp where excelFileName is not null) > 0
Begin
Select Top 1 @fileName = excelFileName From #tmp
SET @sql = 'BULK INSERT #tmpCol FROM "C:\Users\owain.esau\OneDrive\Work\Companies\IronSude\backupFiles\' + @filename + '" WITH (ROWTERMINATOR = '','', LASTROW = 1)'
EXEC (@sql)
UPDATE #tmpCol SET col = REPLACE(col, '"', '')
UPDATE #tmpCol SET col = REPLACE(col, ' ', '')
WHILE (SELECT COUNT(*) FROM #tmpCol WHERE col IS NOT NULL) > 0
BEGIN
Select Top 1 @colName = col From #tmpCol
SET @tableName = LEFT(@filename, LEN(@filename) - 5)
SET @sql2 = 'CREATE TABLE [' + @tableName + ']('
SELECT @sql2 = @sql2 + '[' + col + '],' FROM #tmpCol
SET @sql2 = SUBSTRING(@sql2,1,LEN(@sql2) -1) + 'NVARCHAR(MAX)) '
EXEC(@sql2)
DELETE FROM #tmpCol WHERE col = @colName
END
Delete from #tmp Where excelFileName = @FileName
End
DROP TABLE #tmp
DROP TABLE #tmpCol
문제는, 제 동적 SQL 쿼리이다
SET @sql = 'BULK INSERT #tmpCol FROM "C:\Users\owain.esau\OneDrive\Work\Companies\IronSude\backupFiles\' + @filename + '" WITH (ROWTERMINATOR = '','', LASTROW = 1)'
마지막 행이 1로 설정되어 있기 때문에은 및 rowterminator 그것은 단 하나 개의 컬럼을 집어 ''이다. =
"Attachment Id","Attachment Owner Id","Modified By","Created By","Created Time","Modified Time","File Name",Size,"Parent Id","Attachment Type",Documents
내가 LASTROW을 설정할 수 있습니다 어쨌든 거기에 '\ n을'의 첫 번째 인스턴스를 : 나는 '\ n을'에 RowTerminator을 변경하면이 같은 한 줄에 모두 넣는다?
안녕하세요, @OwainEsau 귀하의 질문에 올바르게 답변을 – Pream