Sql server 如何对另一个表中的每条记录重复查询?SQL Server 2012

Sql server 如何对另一个表中的每条记录重复查询?SQL Server 2012,sql-server,Sql Server,我有一个.txt文件,其中包含必须存储在表中的数据,我为此编写了一个查询 问题是有很多.txt文件,可以添加更多,我认为可以创建一个带有.txt文件名的表。我需要使用这些名称作为变量,对每个文件运行查询 这是我的代码: CREATE TABLE #textfile (line varchar(8000)) BULK INSERT #textfile FROM 'c:\MXAPT1_SNDA01_1_SSD.TXT' GO -- Now read it and insert INSE

我有一个
.txt
文件,其中包含必须存储在表中的数据,我为此编写了一个查询

问题是有很多
.txt
文件,可以添加更多,我认为可以创建一个带有
.txt
文件名的表。我需要使用这些名称作为变量,对每个文件运行查询

这是我的代码:

CREATE TABLE #textfile (line varchar(8000)) 

BULK INSERT #textfile 
FROM 'c:\MXAPT1_SNDA01_1_SSD.TXT' 
GO 

-- Now read it and insert 
INSERT INTO san3parvols(disco, tipo, fecha, totcap, alloc, disp)
    (SELECT 
         disco, tipo, fecha, 
         SUM(totcap) AS totcap, SUM(alloc) AS alloc,
         SUM(totcap) - SUM(alloc) AS disp  
     FROM
        (SELECT 
             'MXAPT1_SNDA01_TRIARA_1' as disco, 'SSD' AS tipo, 
             CASE 
                WHEN substring(line,3,4) = 'tal' 
                   THEN 'Total Capacity' 
                   EKSE 'Allocated' 
             END AS valor, 
             CAST(substring(line, PatIndex('%[0-9]%', line), LEN(line)) AS numeric(18,2)) AS cap,
             CONVERT(DATE, getdate()) AS fecha,
             CAST(CASE 
                     WHEN substring(line, 3, 4) = 'tal'
                        THEN substring(line, PatIndex('%[0-9]%', line), LEN(line)) 
                        ELSE 0 
                  END AS numeric(18,2)) AS totcap,
             CAST(CASE 
                     WHEN substring(line, 3, 4) = 'Allo'
                        THEN substring(line, PatIndex('%[0-9]%', line), len(line)) 
                        ELSE 0 
                  END AS numeric(18,2)) AS alloc
         FROM 
             #textfile  
         WHERE
             substring(line, 3, 4) IN ('tal', 'Allo')) AS txt1
GROUP BY
    disco, tipo, fecha)

-- And then clean up 
DROP TABLE #textfile 
GO  
我知道你可以帮忙,我提前向你表示感谢

编辑

万一有人需要我向M.Ali提出的最后一个问题的答案,我将分享关于如何添加多个变量的代码

Declare @File Nvarchar(max), @sql Nvarchar(max), @name Nvarchar(max), @tipo Nvarchar(max);

Declare Cur CURSOR LOCAL FAST_FORWARD FOR 
SELECT trespar, name, tipo
FROM sanparlist 

OPEN Cur 

  FETCH NEXT FROM Cur INTO @File, @name, @tipo  

WHILE (@@FETCH_STATUS = 0)
BEGIN

   TRUNCATE TABLE Textfile_Stagging_table

   SET @Sql = N' BULK INSERT Textfile_Stagging_table 
                 FROM ''' + @File + ''''

   Execute sp_executesql @Sql

   INSERT INTO san3parvols(disco, tipo, fecha,totcap, alloc, disp)
(SELECT disco, tipo, fecha, sum(totcap) AS totcap, sum(alloc) AS alloc,sum(totcap)-sum(alloc) AS disp  FROM 
(SELECT @name AS disco, @tipo AS tipo, 
        CASE WHEN substring(line,3,4) = 'tal'THEN 'Total Capacity' ELSE 'Allocated' END AS valor, 
        cast(substring(line, PatIndex('%[0-9]%', line), len(line)) AS numeric(18,2) )AS cap,
        convert(DATE,getdate()) AS fecha,
        cast(CASE WHEN substring(line,3,4) = 'tal'THEN substring(line, PatIndex('%[0-9]%', line), len(line)) ELSE 0 END AS numeric(18,2)) AS totcap,
        cast(CASE WHEN substring(line,3,4) = 'Allo'THEN substring(line, PatIndex('%[0-9]%', line), len(line)) ELSE 0 END AS numeric(18,2)) AS alloc
FROM Textfile_Stagging_table  
WHERE substring(line,3,4) in('tal','Allo')) AS txt1
GROUP BY disco, tipo, fecha)

     FETCH NEXT FROM Cur INTO @File, @name, @tipo  
END

CLOSE Cur 
DEALLOCATE Cur;

是的,可以在表中包含文件名,并编写查询以从表中获取文本文件名并将其插入数据库


  • 创建游标以循环遍历包含txt文件详细信息的表
  • 假设您的表名为“TxtFile”,列文件名包含要导入的文本文件名的完整路径


  • 是的,可以在表中包含文件名,并编写查询以从表中获取文本文件名并将其插入数据库


  • 创建游标以循环遍历包含txt文件详细信息的表
  • 假设您的表名为“TxtFile”,列文件名包含要导入的文本文件名的完整路径


  • 也许我遗漏了什么,但我不太确定你的问题是什么。是否要将文本文件的可变集合中的数据导入数据库中的表中?是的,完全正确。如果我对每个.txt文件重复代码,我可以成功地完成此操作。挑战在于如何运行查询的次数与存储在特定表中的.txt文件名的次数相同。。就像一个循环。。非常感谢您的回答。如果你有任何想法,请告诉我。也许我遗漏了什么,但我不太确定你的问题是什么。是否要将文本文件的可变集合中的数据导入数据库中的表中?是的,完全正确。如果我对每个.txt文件重复代码,我可以成功地完成此操作。挑战在于如何运行查询的次数与存储在特定表中的.txt文件名的次数相同。。就像一个循环。。非常感谢您的回答。如果你有任何想法,请告诉我。谢谢你,阿里先生。我马上就去试试,我会让你知道它是怎么回事。。谢谢你,阿加尼特工作得很有魅力,这太完美了。。我有一个bounch.txt文件要在不同的查询中处理。。谢谢你,先生,没有问题。。如何添加更多变量来填充查询中的名称和类型?谢谢M.Ali。我马上就去试试,我会让你知道它是怎么回事。。谢谢你,阿加尼特工作得很有魅力,这太完美了。。我有一个bounch.txt文件要在不同的查询中处理。。谢谢你,先生,没有问题。。如何添加更多变量来填充查询中的名称和类型?
    -- Create a Table in SQL Server 
    
    CREATE TABLE Textfile_Stagging_table (line varchar(8000)) 
    GO
    
    Declare @File Nvarchar(max), @sql Nvarchar(max);
    
    Declare Cur CURSOR LOCAL FAST_FORWARD FOR 
    SELECT [FileName]
    FROM TxtFiles 
    
    OPEN Cur 
    
      FETCH NEXT FROM Cur INTO @File  
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
    
       TRUNCATE TABLE Textfile_Stagging_table
    
       SET @Sql = N' BULK INSERT Textfile_Stagging_table 
                     FROM ''' + @File + ''''
    
       Execute sp_executesql @Sql
    
       -- Your original query to get data into final destination table
       -- from the Stagging table can go here 
    
       -- insert into san3parvols(disco, tipo, fecha,totcap, alloc, disp)
       -- Select bla bla bla 
       -- FROM Textfile_Stagging_table
    
         FETCH NEXT FROM Cur INTO @File  
    END
    
    CLOSE Cur 
    DEALLOCATE Cur;