【问题标题】:select * into without max rows limit T-SQLselect * into 没有最大行数限制 T-SQL
【发布时间】:2017-10-31 14:12:30
【问题描述】:

我正在使用 SQL 中的循环复制一系列表。我从SQL Server Maximum rows that can be inserted in a single insert statment 推断出,对于我的SQL SERVER,可以使用select * 插入的最大行数为10,000。但是,源表大于 10,000 行。有没有办法绕过这个限制,而无需明确说明 select 语句中的列,因为每个表的列都不同?

DECLARE @iTable TABLE (TableName VARCHAR(50),Id int identity(1,1))
INSERT INTO @iTable
Select distinct table_name From INFORMATION_SCHEMA.COLUMNS 
Where table_name like 'D0%' OR table_name like 'D1%'
DECLARE @imax int
DECLARE @iSQL VARCHAR(MAX) 
DECLARE @iTableName VARCHAR(max)
DECLARE @iid int = 1
select @imax = MAX(Id) from @iTable
WHILE (@iid <= @imax) 
BEGIN
    SELECT @iTableName = TableName FROM @iTable WHERE Id = @iid
    SET @iSQL = 'select * into st_'+ @iTableName +' from '+ @iTableName +';'
    EXEC(@iSQL)
    SET @iid = @iid +1
END

【问题讨论】:

  • “我发现可以使用 select * 插入的最大行数为 10,000” - 是否愿意提供指向该效果的链接?这不是我听说过的限制......这根本不是真的!
  • I've discovered that the maximum rows which can be inserted using a select * is 10,000,你是怎么发现的?,你使用的是什么版本的SQL Server,因为我以前从未遇到过这种情况,我刚刚测试了从一个表插入10,000,000到另一个没有问题
  • 已在上面编辑 - 未发现“推断”!当我测试代码时,表格的计数(*)为 10k 行

标签: sql-server tsql


【解决方案1】:

如前所述,使用 select into 时没有行数限制。但是,您当然可以简化代码并摆脱该循环。

DECLARE @iSQL NVARCHAR(MAX) = ''

SELECT @iSQL = @iSQL + 'select * into st_'+ TABLE_NAME +' from '+ TABLE_NAME +';'
from INFORMATION_SCHEMA.COLUMNS 
Where TABLE_NAME like 'D0%' 
    OR TABLE_NAME like 'D1%'
group by TABLE_NAME

select @iSQL
--uncomment below when you are satisfied the dynamic sql is correct.
--exec sp_executesql @iSQL

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 1970-01-01
    • 2011-04-19
    • 2012-01-23
    • 1970-01-01
    • 2023-02-09
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多