【问题标题】:Insert records into table in SQL server在 SQL Server 的表中插入记录
【发布时间】:2011-05-09 01:49:56
【问题描述】:

SQL SERVER(05 & 08) 中有没有一种方法可以将外部文件中的记录插入到临时表中?我根本没有访问数据库的权限。这是我尝试做的:

CREATE table #temp
(KEY_ID INT)

INSERT INTO #temp
SELECT 90883000

运行#temp 表并显示结果:

KEY_ID
---------
90883000

它只适用于一张唱片。如果我有一百条记录,我该怎么办?非常感谢!!!

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    这只是为了展示如何在表格中添加多行。

    CREATE table #temp(
       KEY_ID integer
    )
    
    Declare @i as int
    
    set @i = 1
    
    WHILE  (@i <= 10000)
    BEGIN
    
    insert into #temp values(@i)
    
    set @i += 1
    
    End 
    

    【讨论】:

      【解决方案2】:

      表变量怎么样。我相信#temp 需要对 tempdb 数据库的权限。我相信表变量的使用与任何其他基于会话的变量一样。

      声明一个表变量:

      DECLARE @ProductTotals TABLE
      (
        ProductID int,
        Revenue money
      )
      

      插入表变量:

      INSERT INTO @ProductTotals (ProductID, Revenue)
        SELECT ProductID, SUM(UnitPrice * Quantity)
          FROM [Order Details]
          GROUP BY ProductID
      

      【讨论】:

      • 谢谢大家。我试图导入临时文件的记录来自数据库外部。
      【解决方案3】:

      对于导入文件,您可以使用BULK IMPORT。使用它来将数据放入您的临时表中,然后您可以对其运行基于集合的操作。


      插入大量行的更有效方法。

      INSERT INTO #temp
      (KeyID)
      SELECT TOP 1000 -- PUT YOUR QUANTITY HERE
             IDENTITY(INT,1,1) AS N
      FROM Master.dbo.SysColumns sc1,
           Master.dbo.SysColumns sc2
      

      如果您要经常使用它,只需让他们为您创建一个 TALLY TABLE

      【讨论】:

      • 谢谢布拉德。我试图插入的记录来自数据库外部。所以,不确定这是否可行。
      • 你想用这个文件做什么?您的访问权限有多大?
      • 我正在尝试将要插入临时 tb 的记录与现有表中的记录相匹配。我可以做这样的事情 select key_id from table1 where key_id in(90883000, ..., ..., ...,...)。这种方法适用于少数人,但在数百人时效率不高)。这就是为什么我试图创建一个临时加入 table1。
      • 匹配更新或输出到不同的进程?您是否尝试过使用BULKIMPORT 将记录放入临时表,然后与INNER JOIN 匹配?
      • @Brad,我尝试使用 Bulkimport 方法获取记录,但由于 - 您没有使用批量加载语句的权限,所以没有用。消息:4834,级别:16,状态:4,过程:,行:11
      【解决方案4】:

      如果我在某处的文件中有值,我通常会这样做。将数百条记录从平面文本文件插入临时表。我的示例只有一列,但只要平面文件以某种方式分隔,您就可以根据需要执行任意数量的列。需要确保将文本文件放在您有权访问的目录中。

      IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL DROP TABLE #TempTable
      
      CREATE TABLE #TempTable(Col1 varchar(10))   --Specify temp-table name & columns
      
          BULK INSERT #TempTable
             FROM 'C:\FileName.txt'           --Specify file path/name
             WITH (
               FIELDTERMINATOR = '\t',
               ROWTERMINATOR = '\n'
             );
          GO
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-17
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        相关资源
        最近更新 更多