sqlserver批量
‘壹’ 如何高效地批量导入数据到sqlServer
SqlBulkCopy是个不错的选择,直接由DataTable可以导入到数据库,但要注意(1)列名与目标表一致(2)数据类型一致(3)空值容错处理,参考代码:///<summary///将<see cref="DataTable"/
的数据批量插入到数据库中。///</summary///<param name="dataTable"
要批量插入的
<see cref="DataTable"/。
</param///<param name="batchSize"
每批次写入的数据量。
</(DataTable dataTable,
stringtableName,
intbatchSize =10000){using(SqlConnection connection =newSqlConnection(myConnectionString)){try{connection.Open();//给表名加上前后导符using(varbulk =newSqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity,
null){DestinationTableName=tableName,
BatchSize=batchSize}){//循环所有列,为bulk添加映射//dataTable.EachColumn(c = bulk.ColumnMappings.Add(c.ColumnName, c.ColumnName), c = !c.AutoIncrement);foreach(DataColumn dcindataTable.Columns){bulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);}bulk.WriteToServer(dataTable);
bulk.Close();}returntrue;}catch(Exception exp){returnfalse;}finally{connection.Close();}}}
如果是数据量非常大,超过10W以上的数据,可以考虑生成.dtsx文件,然后由C#代码直接调用,效率还是不错的。
‘贰’ SQLSERVER数据库中批量导入数据的几种方法
我们通过SQL脚本来插入数据,常见如下四种方式。
方式一:一条一条插入,性能最差,不建议使用。
INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛栏1段',160);INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛栏2段',260);
......
方式二:insert bulk
语法如下:
方式四:拼接SQL
INSERT INTO Proct(Id,Name,Price) VALUES(newid(),'牛栏1段',160)
,(newid(),'牛栏2段',260)
......
‘叁’ sqlserver 差异备份,如何批量还原
批量还原代码如下:
Use master
GO
/*=================Usp_RestoreMuiteDataBaseFromPath========================
=====Restore Mutite DataBase File From a Path ======
=====Ken.Guo ======
=====2010.9.10 ======
=====Version: 2005 & 2008 SQL Server ======
=====EXEC Usp_RestoreMuiteDataBaseFromPath 'D:\databack','',0 ======
=========================================================================
*/
CREATE PROC Usp_RestoreMuiteDataBaseFromPath
( @DatabBaseBakPath nvarchar(400)
,@RestoreDataPath nvarchar(400)='' --RESTORE DATABASE PATH
,@IsRun smallint=0 -- 0 PRINT 1 run
)
AS
BEGIN
set nocount on
DECLARE @BackUpFileName nvarchar(200)
,@DbName nvarchar(200)
,@errorinfo nvarchar(400)
IF not exists(SELECT 1
FROM master.sys.proceres WITH(NOLOCK)
WHERE
name=N'Usp_RestoreDataBaseFormPath'
)
begin
Raiserror 50001 N'找不到存储过程SP_RestoreDataBaseFormPath '
Goto ExitFLag
end
--add path \
if (@DatabBaseBakPath is not null) and len(@DatabBaseBakPath)>1
and (right(@DatabBaseBakPath,1)<>'\')
set @DatabBaseBakPath=@DatabBaseBakPath+'\'
--Check Restore Path and Size >1000M
DECLARE @checkdrive int
SET @checkdrive=1
EXEC master.dbo.Usp_Check_DriveExists @RestoreDataPath,@checkdrive OUTPUT
IF(@checkdrive<>1)
Goto ExitFLag
DECLARE @Dir TABLE
(
BackDBFileName nvarchar(100)
,DEPTH int
,[File] int
)
INSERT INTO @Dir EXEC xp_dirtree @DatabBaseBakPath
,1
,1
DELETE FROM @Dir
WHERE charindex('.bak',BackDBFileName)=0
if not exists (select top 1 1 from @Dir)
begin
Raiserror 50001 N'在提供的路径下没有找到合符要求的备份文件'
Goto ExitFLag
end
declare db_file Cursor Local Static Read_Only Forward_Only
for
select BackDBFileName from @Dir
Open db_file
Fetch Next from db_file into @BackUpFileName
while @@FETCH_STATUS=0
begin
--Restore DataBase
set @BackUpFileName=@DatabBaseBakPath+@BackUpFileName
exec master.dbo.Usp_RestoreDataBaseFormPath @BackUpFileName,@RestoreDataPath,@IsRun
Fetch Next from db_file into @BackUpFileName
end
Close db_file
deallocate db_file
ExitFLag:
set nocount off
end
‘肆’ sqlserver批量插入多条数据怎么返回自增编号
SELECTIDENT_CURRENT('TableName')--返回当前的最后自动编号SELECTIDENT_INCR('TableName')--返回增量值SELECTIDENT_SEED('TableName')--返回种子值返回下一个自动编号:SELECTIDENT_CURRENT('TableName')+(SELECTIDENT_INCR('TableName'))--创建数据库和表(idintidentity(1,1),namevarchar(20))--执行这个SQL,就能查出来刚插入记录对应的自增列的值insertintomytablevalues('李四')select@@identitydeclare@new_idintinsertintotest_idvalues('haha')
‘伍’ SQLSERVER 批量导入EXCEL文件数据
SQL批量导入exe文件数据的话,直接从批量导入就好了。
‘陆’ 如何对sqlserver数据库表内数据批量处理(C#)
告诉你个思路,你先按常规方法把数据查询出来,放在model里面,然后取值取到d列时,用b*c,记得转换下类型,还有Model里面的d也设为Int类型的,如果说你数据库里的b,c,d都是Int
类型的,那就再好不过了。不会的再问我
‘柒’ sqlserver怎么批量删除大量数据
删除大量数据速度是正常的。
如果表里面数据都不要了,可以直接truncate
如果表里面数据只有一小部分要得,可以把小的备份出来,然后truncate表,然后再把备份的数据导回来
如果只是删除表中部分数据,可以写成循环小批量删除脚本;如果服务器性能好,百万数据删除还是很快的
‘捌’ 提高Sqlserver大批量插入数据速度的几点方法
这个可以借助系统表,一次插入多条的方式,来达到减少插入的次数,来达到大批量插入数据的方法。
‘玖’ sqlserver中如何批量修改一个表的数据
如果想把"SQL"表的前缀"ABC_"改为"DEF"
先用SQL语句查询所有"ABC_"前缀的表
select * from sysobjects where xtype='u' and name like 'ABC_%'
然后用修改语句
‘拾’ sqlserver数据库 怎么批量导出索引
sqlserver数据库 怎么批量导出索引
索引是建立在表的基础上的。所以SQL Server 2008没有提供只导出索引脚本的选项。
可以在导出向导中将选项"生成索引脚本(Script Indexes)"设置为True,然后在对象类型中只选择“表(Tables)".这样导出的脚本中就包含了索引的脚本,当然也包括表的脚本。如果不需要表的脚本,手工把它们删掉或者注释掉即可。