select * into without max rows limit T-SQL 将所有数据选择插入到T-SQL中的表中,不限制最大行数。
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
在使用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语句,而不受最大行数限制的影响。这样可以简化代码并提高代码的可读性和维护性。