[SQL Server] 常見經驗總結
技術標籤:資料庫
- 通過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
— 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),
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
- 用儲存過程匯入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