1、在查詢分析器下查詢Excel文檔
SELECT * FROM
OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:/測試.xls";
User ID=Admin;Password=;Extended properties=Excel 8.0')...Sheet1$
2、從數據庫中導出數據並存到文件中
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:/temp1.xls -c -q -S"." -U"sa" -P""'
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:/temp1.txt -c -q -S"." -U"sa" -P""'
3、從文件中導入數據到數據庫對應表中
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:/temp1.xls -c -q -S"." -U"sa" -P""'
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:/temp1.txt -c -q -S"." -U"sa" -P""
【SQL SERVER 數據庫實用SQL語句】
1.按姓氏筆畫排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.分頁SQL語句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 結束位置
3.獲取當前數據庫中的所有用戶表
select * from sysobjects where xtype='U' and category=0
4.獲取某一個表的所有字段
select name from syscolumns where id=object_id('表名')
5.查看與某一個表相關的視圖、存儲過程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
6.查看當前數據庫中所有存儲過程
select name as 存儲過程名稱 from sysobjects where xtype='P'
7.查詢用戶創建的所有數據庫
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
8.查詢某一個表的字段和數據類型
select column_name,data_type from information_schema.columns
where table_name = '表名'
9.使用事務
在使用一些對數據庫表的臨時的SQL語句操作時,可以採用SQL SERVER事務處理,防止對數據操作後發現誤操作問題
開始事務
Begin tran
Insert Into TableName Values(…)
SQL語句操作不正常,則回滾事務。
回滾事務
Rollback tran
SQL語句操作正常,則提交事務,數據提交至數據庫。
提交事務
Commit tran
10. 按全文匹配方式查詢
字段名 LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'%[^a-zA-Z0-9]China'
OR 字段名 LIKE N'China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'China
11.計算執行SQL語句查詢時間
declare @d datetime
set @d=getdate()
select * from SYS_ColumnProperties select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
12、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重複行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。
/******* 導出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'
/*********** 導入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/*動態文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:/test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/
SELECT cast(cast(科目編號 as numeric(10,2)) as nvarchar(255))+' ' 轉換後的別名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/********************** EXCEL導到遠程SQL
insert OPENDATASOURCE(
'SQLOLEDB',
'Data Source=遠程ip;User ID=sa;Password=密碼'
).庫名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/** 導入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:/DT.txt -c -Sservername -Usa -Ppassword'
/** 導出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:/DT.txt -c -Sservername -Usa -Ppassword'
或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:/DT.txt -c -Sservername -Usa -Ppassword'
導出到TXT文本,用逗號分開
exec master..xp_cmdshell 'bcp "庫名..表名" out "d:/tt.txt" -c -t ,-U sa -P password'
BULK INSERT 庫名..表名
FROM 'c:/test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '/n'
)
--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:/','select * from [客戶資料4.dbf]')
--*/
--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:/','select * from [客戶資料3.dbf]')
--*/
--/* FoxPro 數據庫
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/',
'select * from [aa.DBF]')
--*/
/**************導入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:/VFP98/data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 導出到DBF ***************/
如果要導出數據到已經生成結構(即現存的)FOXPRO表中,可以直接用下面的SQL語句
insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/',
'select * from [aa.DBF]')
select * from 表
說明:
SourceDB=c:/ 指定foxpro表所在的文件夾
aa.DBF 指定foxpro表的文件名.
/*************導出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
'x:/A.mdb';'admin';'',A表) select * from 數據庫名..B表
/*************導入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
'x:/A.mdb';'admin';'',A表)
文件名爲參數
declare @fname varchar(20)
set @fname = 'd:/test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
'''+@fname+''';''admin'';'''', topics) as a ')
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="f:/northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...產品 '
1. 分頁查詢數據
--查詢到行的結果
select * from(
select ID,DocClassName,DocClassDesc, ROW_NUMBER() OVER(order by ID) as row from Sys_DocClass
) a
where row between 20 and 30
select * from Sys_DocClass
2、增加異常處理 try ... catch
SET XACT_ABORT ON -- 打開try功能
BEGIN TRY
begin tran
insert into Sys_DocClass values(...) --數據表操作語句
commit tran --提交事務
print 'commited'
END TRY
BEGIN CATCH
rollback tran --回滾事務
print 'rolled back'
END CATCH
3、通用表達式CTE,可以簡化嵌套SQL
--例:結合通用表達式進行分頁
WITH DocClasses AS(
select ID,DocClassName,DocClassDesc, ROW_NUMBER() OVER(order by ID) as row from Sys_DocClass
)
select ID,DocClassName,DocClassDesc from DocClasses where row between 20 and 30
SQL SERVER 數據庫實用SQL語句】
1.按姓氏筆畫排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.分頁SQL語句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 結束位置
3.獲取當前數據庫中的所有用戶表
select * from sysobjects where xtype='U' and category=0
4.獲取某一個表的所有字段
select name from syscolumns where id=object_id('表名')
5.查看與某一個表相關的視圖、存儲過程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
6.查看當前數據庫中所有存儲過程
select name as 存儲過程名稱 from sysobjects where xtype='P'
7.查詢用戶創建的所有數據庫
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
8.查詢某一個表的字段和數據類型
select column_name,data_type from information_schema.columns
where table_name = '表名'
9.使用事務
在使用一些對數據庫表的臨時的SQL語句操作時,可以採用SQL SERVER事務處理,防止對數據操作後發現誤操作問題
開始事務
Begin tran
Insert Into TableName Values(…)
SQL語句操作不正常,則回滾事務。
回滾事務
Rollback tran
SQL語句操作正常,則提交事務,數據提交至數據庫。
提交事務
Commit tran
10. 按全文匹配方式查詢
字段名 LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'%[^a-zA-Z0-9]China'
OR 字段名 LIKE N'China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'China
11.計算執行SQL語句查詢時間
declare @d datetime
set @d=getdate()
select * from SYS_ColumnProperties select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
12、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重複行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。