1. 程式人生 > 其它 >[SQL Server] 常見經驗總結

[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