select * into without max rows limit T-SQL 将所有数据选择插入到T-SQL中的表中,不限制最大行数。

30 浏览
0 Comments

select * into without max rows limit T-SQL 将所有数据选择插入到T-SQL中的表中,不限制最大行数。

我在SQL中使用循环复制一系列表格。根据《SQL Server最大插入语句可插入的行数》的内容,我推断出使用select *插入的最大行数为10,000,但源表的行数超过10,000。是否有一种方法可以绕过此限制而无需在选择语句中明确指定列,因为每个表的列都不同?

DECLARE @iTable TABLE (TableName VARCHAR(50),Id int identity(1,1))
INSERT INTO @iTable
从INFORMATION_SCHEMA.COLUMNS中选择不同的table_name 
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
从@iTable中选择最大的Id赋值给@imax
WHILE (@iid <= @imax) 
BEGIN
    从@iTable中选择TableName赋值给@iTableName,其中Id = @iid
    将'select * into st_'+ @iTableName +' from '+ @iTableName +';'赋值给@iSQL
    执行@iSQL
    @iid = @iid +1
END

0
0 Comments

在使用T-SQL的select into语句时,并没有对最大行数进行限制。然而,你可以简化你的代码并摆脱循环。

问题的解决方法是使用动态SQL来生成并执行select into语句。下面是一个示例代码片段,其中使用了动态SQL来生成多个select into语句:

DECLARE @sql NVARCHAR(MAX) = ''
SELECT @sql = @sql + '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
-- 执行动态SQL语句
EXEC sp_executesql @sql

在上面的代码中,首先声明了一个变量`@sql`用于存储动态生成的SQL语句。然后使用SELECT语句从INFORMATION_SCHEMA.COLUMNS视图中获取需要执行select into操作的表名,并使用字符串拼接的方式生成select into语句。最后通过执行`EXEC sp_executesql`来执行动态生成的SQL语句。

通过使用动态SQL,你可以生成并执行任意数量的select into语句,而不受最大行数限制的影响。这样可以简化代码并提高代码的可读性和维护性。

0