[SQL Server] 常见经验总结

  1. 通过SQL Server Management Studio查看存储过程实现

SELECT sm.DEFINITION
FROM sys.objects so
INNER JOIN sys.all_sql_modules sm
ON so.object_id = sm.object_id
WHERE type = ‘P’
AND so.NAME = ‘’–stored procedure name–
2. 导入csv文件到数据库
当文件有主键时,最好通过一个staging table来做数据中转
bulk insert导入文件时,可能需要用用0x0a来作为换行,而不是使用\n
当mysql导出的文件utf8编码时,SQL Server不支持utf8,需要转换成utf16,可以用notepad++的“convert to UCS-2 little Endian”,同时换行需要用0x0a00
— Create table
create table z_table
(
id int identity(1, 1) primary key,
a varchar(64),
b varchar(128),
c varchar(128),
dev_1 int,
dev_2 int
)

create table z_table_staging
(
a varchar(128),
b varchar(128),
c varchar(128),
dev_1 int,
dev_2 int
)

bulk insert z_table_staging
from ‘D:\all_info.csv’
with (FIELDTERMINATOR = ‘,’, ROWTERMINATOR = ‘0x0a’)

–For utf16
bulk insert z_table
from ‘’’ + @file + ‘’’
with (
KEEPIDENTITY,
DATAFILETYPE = ‘‘widechar’’,
FIELDTERMINATOR = ‘’#’’,
ROWTERMINATOR = ‘‘0x0a00’’,
ERRORFILE = ‘‘D:\debug.log’’
)

INSERT INTO z_table(a, b, c, dev_1, dev_2)
SELECT a, b, c, dev_1, dev_2 FROM z_table_staging

drop table z_table_staging

  1. 用存储过程导入csv文件到数据库
    主要是一些变量要注意的地方

USE [DB1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
– =============================================
– Author: Jerry

– Description: Load db file
– =============================================
ALTER PROCEDURE [dbo].[importdb]
(
@file varchar(64)
)

AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;

-- Create table
DECLARE @t1String NVARCHAR(MAX)
DECLARE @t1name VARCHAR(64)
SET @t1name = 't_result_' + CONVERT(VARCHAR(10), GETDATE(), 112)

SET @t1String = 'CREATE TABLE '+ @t1name + '( 
	id int identity(1, 1) primary key,
	...
) '

EXEC (@t1String)

DECLARE @t2String NVARCHAR(MAX)
SET @t2String = 'CREATE TABLE t_result_staging ( 
	...
) '

EXEC (@t2String)

DECLARE @t3String NVARCHAR(MAX)
SET @t3String = '
	bulk insert t_result_staging
	from ''' + @file + '''
	with (FIELDTERMINATOR = '','', ROWTERMINATOR = ''0x0a'')
'
EXEC (@t3String)

DECLARE @t4String NVARCHAR(MAX)
SET @t4String = 'INSERT INTO ' + @t1name + '(...) 

SELECT …
FROM t_result_staging’

EXEC (@t4String)

DECLARE @t5String NVARCHAR(MAX)
SET @t5String = ’
drop table t_result_staging

EXEC (@t5String)

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值