Sql Server 知識收集錄
--語 句 功 能
--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表新增新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --建立一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --建立一個檢視
DROP VIEW --從資料庫中刪除檢視
CREATE INDEX --為資料庫表建立一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --建立一個儲存過程
DROP PROCEDURE --從資料庫中刪除儲存過程
CREATE TRIGGER --建立一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫新增一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --建立一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予使用者訪問許可權
DENY --拒絕使用者訪問
REVOKE --解除使用者訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定遊標
EXPLAN --為查詢描述資料訪問計劃
OPEN --檢索查詢結果開啟一個遊標
FETCH --檢索一行查詢結果
CLOSE --關閉遊標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
---區域性變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全域性變數
---必須以@@開頭
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用萬用字元)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form. table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連線,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連線
select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
***update***
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
***alter table*** --- 修改資料庫表結構
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示錶已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(建立新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/*常用函式*/)***
----統計函式----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函式返回表示式中所有資料的標準差
--STDEVP()
--STDEVP()函式返回總體標準差
--VAR()
--VAR()函式返回表示式中所有值的統計變異數
--VARP()
--VARP()函式返回總體變異數
----算術函式----
/***三角函式***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函式***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換為角度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
RADIANS(numeric_expression) --把角度轉換為弧度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
EXP(float_expression) --返回表示式的指數值
LOG(float_expression) --返回表示式的自然對數值
LOG10(float_expression)--返回表示式的以10 為底的對數值
SQRT(float_expression) --返回表示式的平方根
/***取近似值函式***/
CEILING(numeric_expression) --返回>=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
FLOOR(numeric_expression) --返回<=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的資料
--型別與表示式相同可為INTEGER/MONEY/REAL/FLOAT 型別
ABS(numeric_expression) --返回表示式的絕對值返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
SIGN(numeric_expression) --測試引數的正負號返回0 零值1 正數或-1 負數返回的資料型別
--與表示式相同可為INTEGER/MONEY/REAL/FLOAT 型別
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
----字串函式----
ASCII() --函式返回字元表示式最左端字元的ASCII 碼值
CHAR() --函式用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函式會返回一個NULL 值
LOWER() --函式把字串全部轉換為小寫
UPPER() --函式把字串全部轉換為大寫
STR() --函式把數值型資料轉換為字元型資料
LTRIM() --函式把字串頭部的空格去掉
RTRIM() --函式把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函式返回部分字串
CHARINDEX(),PATINDEX() --函式返回字串中某個指定的子串出現的開始位置
SOUNDEX() --函式返回一個四位字元碼
--SOUNDEX函式可用來查詢聲音相似的字串但SOUNDEX函式對數字和漢字均只返回0 值
DIFFERENCE() --函式返回由SOUNDEX 函式返回的兩個字元表示式的值的差異
--0 兩個SOUNDEX 函式返回值的第一個字元不同
--1 兩個SOUNDEX 函式返回值的第一個字元相同
--2 兩個SOUNDEX 函式返回值的第一二個字元相同
--3 兩個SOUNDEX 函式返回值的第一二三個字元相同
--4 兩個SOUNDEX 函式返回值完全相同
QUOTENAME() --函式返回被特定字元括起來的字串
/*select quotename('abc', '{') quotename('abc')
執行結果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函式返回一個重複character_expression 指定次數的字串
/*select replicate('abc', 3) replicate( 'abc', -2)
執行結果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函式將指定的字串的字元排列順序顛倒
REPLACE() --函式返回被替換了指定子串的字串
/*select replace('abc123g', '123', 'def')
執行結果如下
----------- -----------
abcdefg*/
SPACE() --函式返回一個有指定長度的空白字串
STUFF() --函式用另一子串替換字串指定位置長度的子串
----資料型別轉換函式----
CAST() 函式語法如下
CAST() ( AS [ length ])
CONVERT() 函式語法如下
CONVERT() ([ length ], [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
執行結果如下
------------------------------ ------------
199 Jan 15 2000
----日期函式----
DAY() --函式返回date_expression 中的日期值
MONTH() --函式返回date_expression 中的月份值
YEAR() --函式返回date_expression 中的年份值
DATEADD( , ,)
--函式返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF( , ,)
--函式返回兩個指定日期在datepart 方面的不同之處
DATENAME( , ) --函式以字串的形式返回日期的指定部分
DATEPART( , ) --函式以整數值的形式返回日期的指定部分
GETDATE() --函式以DATETIME 的預設格式返回系統當前的日期和時間
----系統函式----
APP_NAME() --函式返回當前執行的應用程式的名稱
COALESCE() --函式返回眾多表示式中第一個非NULL 表示式的值
COL_LENGTH(, ) --函式返回表中指定欄位的長度值
COL_NAME(, ) --函式返回表中指定欄位的名稱即列名
DATALENGTH() --函式返回資料表示式的資料的實際長度
DB_ID(['database_name']) --函式返回資料庫的編號
DB_NAME(database_id) --函式返回資料庫的名稱
HOST_ID() --函式返回伺服器端計算機的名稱
HOST_NAME() --函式返回伺服器端計算機的名稱
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函式只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函式判斷所給定的表示式是否為合理日期
ISNULL(, ) --函式將表示式中的NULL 值用指定值替換
ISNUMERIC() --函式判斷所給定的表示式是否為合理的數值
NEWID() --函式返回一個UNIQUEIDENTIFIER 型別的數值
NULLIF(, )
--NULLIF 函式在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
sql中的保留字
action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill
SQL語句匯入匯出大全
/******* 匯出到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)
*/
/*************匯出到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=;')...產品
********************* 匯入 xml 檔案
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
Customer was very satisfied
Important
Happy Customer.
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc
???????
/**********************Excel導到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
實現將一個Excel檔案內容匯入到一個文字檔案
假設Excel中有兩列,第一列為姓名,第二列為很行帳號(16位)
且銀行帳號匯出到文字檔案後分兩部分,前8位和後8位分開。
鄒健:
如果要用你上面的語句插入的話,文字檔案必須存在,而且有一行:姓名,銀行賬號1,銀行賬號2
然後就可以用下面的語句進行插入
注意檔名和目錄根據你的實際情況進行修改.
insert into
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=Yes;DATABASE=C:'
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
from
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
--,Sheet1$)
)...[Sheet1$]
如果你想直接插入並生成文字檔案,就要用bcp
declare @sql varchar(8000),@tbname varchar(50)
--首先將excel表內容匯入到一個全域性臨時表
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,@sql='select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
into '+@tbname+' from
opendatasource(''MICROSOFT.JET.OLEDB.4.0''
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''
)...[Sheet1$]'
exec(@sql)
--然後用bcp從全域性臨時表匯出到文字檔案
set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'
exec master..xp_cmdshell @sql
--刪除臨時表
exec('drop table '+@tbname)
/*************匯出到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=;')...產品
********************* 匯入 xml 檔案
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
Customer was very satisfied
Important
Happy Customer.
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc
???????
/**********************Excel導到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
實現將一個Excel檔案內容匯入到一個文字檔案
假設Excel中有兩列,第一列為姓名,第二列為很行帳號(16位)
且銀行帳號匯出到文字檔案後分兩部分,前8位和後8位分開。
鄒健:
如果要用你上面的語句插入的話,文字檔案必須存在,而且有一行:姓名,銀行賬號1,銀行賬號2
然後就可以用下面的語句進行插入
注意檔名和目錄根據你的實際情況進行修改.
insert into
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=Yes;DATABASE=C:'
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
from
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
--,Sheet1$)
)...[Sheet1$]
如果你想直接插入並生成文字檔案,就要用bcp
declare @sql varchar(8000),@tbname varchar(50)
--首先將excel表內容匯入到一個全域性臨時表
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,@sql='select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
into '+@tbname+' from
opendatasource(''MICROSOFT.JET.OLEDB.4.0''
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''
)...[Sheet1$]'
exec(@sql)
--然後用bcp從全域性臨時表匯出到文字檔案
set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'
exec master..xp_cmdshell @sql
--刪除臨時表
exec('drop table '+@tbname)
/********************導整個資料庫*********************************************/
用bcp實現的儲存過程
/*
實現資料匯入/匯出的儲存過程
根據不同的引數,可以實現匯入/匯出整個資料庫/單個表
呼叫示例:
--匯出呼叫示例
----匯出單個表
exec file2table 'zj','','','xzkh_sa..地區資料','c:zj.txt',1
----匯出整個資料庫
exec file2table 'zj','','','xzkh_sa','C:docman',1
--匯入呼叫示例
----匯入單個表
exec file2table 'zj','','','xzkh_sa..地區資料','c:zj.txt',0
----匯入整個資料庫
exec file2table 'zj','','','xzkh_sa','C:docman',0
*/
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --伺服器名
,@username varchar(200) --使用者名稱,如果用NT驗證方式,則為空''
,@password varchar(200) --密碼
,@tbname varchar(500) --資料庫.dbo.表名,如果不指定:.dbo.表名,則匯出資料庫的所有使用者表
,@filename varchar(1000) --匯入/匯出路徑/檔名,如果@tbname引數指明是匯出整個資料庫,則這個引數是檔案存放路徑,檔名自動用表名.txt
,@isout bit --1為匯出,0為匯入
as
declare @sql varchar(8000)
if @tbname like '%.%.%' --如果指定了表名,則直接匯出單個表
begin
set @sql='bcp '+@tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+'" /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin --匯出整個資料庫,定義遊標,取出所有的使用者表
declare @m_tbname varchar(250)
if right(@filename,1)<>'' set @filename=@filename+''
set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status=0
begin
set @sql='bcp '+@tbname+'..'+@m_tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+@m_tbname+'.txt " /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end
go
/************* Oracle **************/
EXEC sp_addlinkedserver 'OracleSvr',
'Oracle 7.3',
'MSDAORA',
'ORCLDB'
GO
delete from openquery(mailser,'select * from yulin')
select * from openquery(mailser,'select * from yulin')
update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888
insert into openquery(mailser,'select disorder,catago from yulin')values(333,777)
補充:
對於用bcp匯出,是沒有欄位名的.
用openrowset匯出,需要事先建好表.
用openrowset匯入,除ACCESS及EXCEL外,均不支援非本機資料匯入
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:VFP98data;
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表的檔名.
--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表新增新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --建立一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --建立一個檢視
DROP VIEW --從資料庫中刪除檢視
CREATE INDEX --為資料庫表建立一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --建立一個儲存過程
DROP PROCEDURE --從資料庫中刪除儲存過程
CREATE TRIGGER --建立一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫新增一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --建立一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予使用者訪問許可權
DENY --拒絕使用者訪問
REVOKE --解除使用者訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定遊標
EXPLAN --為查詢描述資料訪問計劃
OPEN --檢索查詢結果開啟一個遊標
FETCH --檢索一行查詢結果
CLOSE --關閉遊標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
---區域性變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全域性變數
---必須以@@開頭
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用萬用字元)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form. table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連線,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連線
select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
***update***
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
***alter table*** --- 修改資料庫表結構
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示錶已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(建立新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/*常用函式*/)***
----統計函式----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函式返回表示式中所有資料的標準差
--STDEVP()
--STDEVP()函式返回總體標準差
--VAR()
--VAR()函式返回表示式中所有值的統計變異數
--VARP()
--VARP()函式返回總體變異數
----算術函式----
/***三角函式***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函式***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換為角度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
RADIANS(numeric_expression) --把角度轉換為弧度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
EXP(float_expression) --返回表示式的指數值
LOG(float_expression) --返回表示式的自然對數值
LOG10(float_expression)--返回表示式的以10 為底的對數值
SQRT(float_expression) --返回表示式的平方根
/***取近似值函式***/
CEILING(numeric_expression) --返回>=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
FLOOR(numeric_expression) --返回<=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的資料
--型別與表示式相同可為INTEGER/MONEY/REAL/FLOAT 型別
ABS(numeric_expression) --返回表示式的絕對值返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
SIGN(numeric_expression) --測試引數的正負號返回0 零值1 正數或-1 負數返回的資料型別
--與表示式相同可為INTEGER/MONEY/REAL/FLOAT 型別
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
----字串函式----
ASCII() --函式返回字元表示式最左端字元的ASCII 碼值
CHAR() --函式用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函式會返回一個NULL 值
LOWER() --函式把字串全部轉換為小寫
UPPER() --函式把字串全部轉換為大寫
STR() --函式把數值型資料轉換為字元型資料
LTRIM() --函式把字串頭部的空格去掉
RTRIM() --函式把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函式返回部分字串
CHARINDEX(),PATINDEX() --函式返回字串中某個指定的子串出現的開始位置
SOUNDEX() --函式返回一個四位字元碼
--SOUNDEX函式可用來查詢聲音相似的字串但SOUNDEX函式對數字和漢字均只返回0 值
DIFFERENCE() --函式返回由SOUNDEX 函式返回的兩個字元表示式的值的差異
--0 兩個SOUNDEX 函式返回值的第一個字元不同
--1 兩個SOUNDEX 函式返回值的第一個字元相同
--2 兩個SOUNDEX 函式返回值的第一二個字元相同
--3 兩個SOUNDEX 函式返回值的第一二三個字元相同
--4 兩個SOUNDEX 函式返回值完全相同
QUOTENAME() --函式返回被特定字元括起來的字串
/*select quotename('abc', '{') quotename('abc')
執行結果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函式返回一個重複character_expression 指定次數的字串
/*select replicate('abc', 3) replicate( 'abc', -2)
執行結果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函式將指定的字串的字元排列順序顛倒
REPLACE() --函式返回被替換了指定子串的字串
/*select replace('abc123g', '123', 'def')
執行結果如下
----------- -----------
abcdefg*/
SPACE() --函式返回一個有指定長度的空白字串
STUFF() --函式用另一子串替換字串指定位置長度的子串
----資料型別轉換函式----
CAST() 函式語法如下
CAST() (
CONVERT() 函式語法如下
CONVERT() (
select cast(100+99 as char) convert(varchar(12), getdate())
執行結果如下
------------------------------ ------------
199 Jan 15 2000
----日期函式----
DAY() --函式返回date_expression 中的日期值
MONTH() --函式返回date_expression 中的月份值
YEAR() --函式返回date_expression 中的年份值
DATEADD(
--函式返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(
--函式返回兩個指定日期在datepart 方面的不同之處
DATENAME(
DATEPART(
GETDATE() --函式以DATETIME 的預設格式返回系統當前的日期和時間
----系統函式----
APP_NAME() --函式返回當前執行的應用程式的名稱
COALESCE() --函式返回眾多表示式中第一個非NULL 表示式的值
COL_LENGTH(, ) --函式返回表中指定欄位的長度值
COL_NAME(
DATALENGTH() --函式返回資料表示式的資料的實際長度
DB_ID(['database_name']) --函式返回資料庫的編號
DB_NAME(database_id) --函式返回資料庫的名稱
HOST_ID() --函式返回伺服器端計算機的名稱
HOST_NAME() --函式返回伺服器端計算機的名稱
IDENTITY(
--IDENTITY() 函式只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函式判斷所給定的表示式是否為合理日期
ISNULL(
ISNUMERIC() --函式判斷所給定的表示式是否為合理的數值
NEWID() --函式返回一個UNIQUEIDENTIFIER 型別的數值
NULLIF(
--NULLIF 函式在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
sql中的保留字
action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill
SQL語句匯入匯出大全
/******* 匯出到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)
*/
/*************匯出到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=;')...產品
********************* 匯入 xml 檔案
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
Customer was very satisfied
Important
Happy Customer.
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc
???????
/**********************Excel導到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
實現將一個Excel檔案內容匯入到一個文字檔案
假設Excel中有兩列,第一列為姓名,第二列為很行帳號(16位)
且銀行帳號匯出到文字檔案後分兩部分,前8位和後8位分開。
鄒健:
如果要用你上面的語句插入的話,文字檔案必須存在,而且有一行:姓名,銀行賬號1,銀行賬號2
然後就可以用下面的語句進行插入
注意檔名和目錄根據你的實際情況進行修改.
insert into
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=Yes;DATABASE=C:'
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
from
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
--,Sheet1$)
)...[Sheet1$]
如果你想直接插入並生成文字檔案,就要用bcp
declare @sql varchar(8000),@tbname varchar(50)
--首先將excel表內容匯入到一個全域性臨時表
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,@sql='select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
into '+@tbname+' from
opendatasource(''MICROSOFT.JET.OLEDB.4.0''
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''
)...[Sheet1$]'
exec(@sql)
--然後用bcp從全域性臨時表匯出到文字檔案
set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'
exec master..xp_cmdshell @sql
--刪除臨時表
exec('drop table '+@tbname)
/*************匯出到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=;')...產品
********************* 匯入 xml 檔案
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
Customer was very satisfied
Important
Happy Customer.
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc
???????
/**********************Excel導到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
實現將一個Excel檔案內容匯入到一個文字檔案
假設Excel中有兩列,第一列為姓名,第二列為很行帳號(16位)
且銀行帳號匯出到文字檔案後分兩部分,前8位和後8位分開。
鄒健:
如果要用你上面的語句插入的話,文字檔案必須存在,而且有一行:姓名,銀行賬號1,銀行賬號2
然後就可以用下面的語句進行插入
注意檔名和目錄根據你的實際情況進行修改.
insert into
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=Yes;DATABASE=C:'
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
from
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
--,Sheet1$)
)...[Sheet1$]
如果你想直接插入並生成文字檔案,就要用bcp
declare @sql varchar(8000),@tbname varchar(50)
--首先將excel表內容匯入到一個全域性臨時表
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,@sql='select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
into '+@tbname+' from
opendatasource(''MICROSOFT.JET.OLEDB.4.0''
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''
)...[Sheet1$]'
exec(@sql)
--然後用bcp從全域性臨時表匯出到文字檔案
set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'
exec master..xp_cmdshell @sql
--刪除臨時表
exec('drop table '+@tbname)
/********************導整個資料庫*********************************************/
用bcp實現的儲存過程
/*
實現資料匯入/匯出的儲存過程
根據不同的引數,可以實現匯入/匯出整個資料庫/單個表
呼叫示例:
--匯出呼叫示例
----匯出單個表
exec file2table 'zj','','','xzkh_sa..地區資料','c:zj.txt',1
----匯出整個資料庫
exec file2table 'zj','','','xzkh_sa','C:docman',1
--匯入呼叫示例
----匯入單個表
exec file2table 'zj','','','xzkh_sa..地區資料','c:zj.txt',0
----匯入整個資料庫
exec file2table 'zj','','','xzkh_sa','C:docman',0
*/
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --伺服器名
,@username varchar(200) --使用者名稱,如果用NT驗證方式,則為空''
,@password varchar(200) --密碼
,@tbname varchar(500) --資料庫.dbo.表名,如果不指定:.dbo.表名,則匯出資料庫的所有使用者表
,@filename varchar(1000) --匯入/匯出路徑/檔名,如果@tbname引數指明是匯出整個資料庫,則這個引數是檔案存放路徑,檔名自動用表名.txt
,@isout bit --1為匯出,0為匯入
as
declare @sql varchar(8000)
if @tbname like '%.%.%' --如果指定了表名,則直接匯出單個表
begin
set @sql='bcp '+@tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+'" /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin --匯出整個資料庫,定義遊標,取出所有的使用者表
declare @m_tbname varchar(250)
if right(@filename,1)<>'' set @filename=@filename+''
set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status=0
begin
set @sql='bcp '+@tbname+'..'+@m_tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+@m_tbname+'.txt " /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end
go
/************* Oracle **************/
EXEC sp_addlinkedserver 'OracleSvr',
'Oracle 7.3',
'MSDAORA',
'ORCLDB'
GO
delete from openquery(mailser,'select * from yulin')
select * from openquery(mailser,'select * from yulin')
update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888
insert into openquery(mailser,'select disorder,catago from yulin')values(333,777)
補充:
對於用bcp匯出,是沒有欄位名的.
用openrowset匯出,需要事先建好表.
用openrowset匯入,除ACCESS及EXCEL外,均不支援非本機資料匯入
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:VFP98data;
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表的檔名.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-594974/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql Server 知識點SQLServer
- SQL SERVER 知識筆記SQLServer筆記
- SQL Server小知識:CheckPointSQLServer
- SQL Server小知識:Processor AffinitySQLServer
- SQL Server小知識:Recovery IntervalSQLServer
- SQL Server 連線基礎知識(轉)SQLServer
- VUE 知識點收集Vue
- Handler知識收集整理
- 直播相關知識收集
- 電腦常用知識收集
- SQL Server常見問題收集SQLServer
- SQL Server 文章目錄SQLServer
- SQL Server系列目錄SQLServer
- Java知識圖譜收集整理Java
- 收集 SQL Server 事件探查器跟蹤資訊SQLServer事件
- Analysis Services基礎知識——深入SQL Server 2008SQLServer
- SQL知識點(+)SQL
- MY SQL 知識SQL
- SQL SERVER收集資料庫使用增量資料SQLServer資料庫
- 牛客網題目知識點收集
- 知識點記錄
- 知識目錄整理
- SQL常備知識SQL
- SQL Server資料庫超級管理員賬號防護知識SQLServer資料庫
- MSSQL Server常用知識總結SQLServer
- 【104天】前端碎片知識收集00002前端
- php知識點目錄PHP
- 部落格知識目錄
- RESTFUL知識書目錄REST
- SQL*Loader 常用知識SQL
- Q&A:SQL Server 2008的升級與部署知識SOSQLServer
- SQL 收集SQL
- 知識圖譜學習記錄--知識圖譜概述
- 如何建立SQL Server分析系統資料收集組BSSQLServer
- PLook——記錄你的知識
- 記錄的小知識點
- 學習記錄 -- 知識點
- SQLL基礎知識記錄SQL