MySQL–數據開發經典與解決方案

數據開發-經典

  • 1.按姓氏筆畫排序:

Select?*?From?TableName?Order?By?CustomerName?Collate?Chinese_PRC_Stroke_ci_as?//從少到多
  • 2.數據庫加密:

select?encrypt('原始密碼')select?pwdencrypt('原始密碼')select?pwdcompare('原始密碼','加密后密碼')?=?1--相同;否則不相同?encrypt('原始密碼')select?pwdencrypt('原始密碼')select?pwdcompare('原始密碼','加密后密碼')?=?1--相同;否則不相同
  • 3.取回表中字段:

declare?@list?varchar(1000),@sql?nvarchar(1000)? select?@list=@list+','+b.name?from?sysobjects?a,syscolumns?b?where?a.id=b.id?and?a.name='表A'set?@sql='select?'+right(@list,len(@list)-1)+'?from?表A'?exec?(@sql)
  • 4.查看硬盤分區:

EXEC?master..xp_fixeddrives
  • 5.比較A,B表是否相等:

if?(select?checksum_agg(binary_checksum(*))?from?A) ?????= ????(select?checksum_agg(binary_checksum(*))?from?B) print?'相等'elseprint?'不相等'
  • 6.殺掉所有的事件探察器進程:

DECLARE?hcforeach?CURSOR?GLOBAL?FOR?SELECT?'kill?'+RTRIM(spid)?FROM?master.dbo.sysprocessesWHERE?program_name?IN('SQL?profiler',N'SQL?事件探查器') EXEC?sp_msforeach_worker?'?'
  • 7.記錄搜索:

開頭到N條記錄Select?Top?N?*?From?表 -------------------------------N到M條記錄(要有主索引ID)Select?Top?M-N?*?From?表?Where?ID?in?(Select?Top?M?ID?From?表)?Order?by?ID???Desc ----------------------------------N到結尾記錄 Select?Top?N?*?From?表?Order?by?ID?Desc

案例 例如1:一張表有一萬多條記錄,表的第一個字段 RecID 是自增長字段, 寫一個SQL語句, 找出表的第31到第40個記錄。 ?select top 10 recid from A where recid not ?in(select top 30 recid ?from A) 分析:如果這樣寫會產生某些問題,如果recid在表中存在邏輯索引。 select top 10 recid from A where…… ?是從索引中查找,而后面的select top 30 recid from A則在數據表中查找,這樣由于索引中的順序有可能和數據表中的不一致,這樣就導致查詢到的不是本來的欲得到的數據。

解決方案

1,用order?by?select?top?30?recid?from?A?order?by?ricid?如果該字段不是自增長,就會出現問題2,在那個子查詢中也加條件:select?top?30?recid?from?A?where?recid>-1例2:查詢表中的最后以條記錄,并不知道這個表共有多少數據,以及表結構。set?@s?=?'select?top?1?*?from?T???where?pid?not?in?(select?top?'?+?str(@count-1)?+?'?pid??from??T)'print?@s??????exec??sp_executesql??@s
  • 9:獲取當前數據庫中的所有用戶表

select?Name?from?sysobjects?where?xtype='u'?and?status>=0
  • 10:獲取某一個表的所有字段

select?name?from?syscolumns?where?id=object_id('表名')select?name?from?syscolumns?where?id?in?(select?id?from?sysobjects?where?type?=?'u'?and?name?=?'表名') 兩種方式的效果相同
  • 11:查看與某一個表相關的視圖、存儲過程、函數

select?a.*?from?sysobjects?a,?syscomments?b?where?a.id?=?b.id?and?b.text?like?'%表名%'
  • 12:查看當前數據庫中所有存儲過程

select?name?as?存儲過程名稱?from?sysobjects?where?xtype='P'
  • 13:查詢用戶創建的所有數據庫

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
  • 14:查詢某一個表的字段和數據類型

select?column_name,data_type?from?information_schema.columnswhere?table_name?=?'表名'
  • 15:不同服務器數據庫之間的數據操作

--創建鏈接服務器exec?sp_addlinkedserver???'ITSV?',?'?',?'SQLOLEDB?',?'遠程服務器名或ip地址?'exec?sp_addlinkedsrvlogin??'ITSV?',?'false?',null,?'用戶名?',?'密碼?'
--查詢示例select?*?from?ITSV.數據庫名.dbo.表名
--導入示例select?*?into?表?from?ITSV.數據庫名.dbo.表名 --以后不再使用時刪除鏈接服務器exec?sp_dropserver??'ITSV?',?'droplogins?'
  • –連接遠程/局域網數據(openrowset/openquery/opendatasource)

--1、openrowset--查詢示例select?*?from?openrowset(?'SQLOLEDB?',?'sql服務器名?';?'用戶名?';?'密碼?',數據庫名.dbo.表名)--生成本地表select?*?into?表?from?openrowset(?'SQLOLEDB?',?'sql服務器名?';?'用戶名?';?'密碼?',數據庫名.dbo.表名)
  • –把本地表導入遠程表

insert?openrowset(?'SQLOLEDB?',?'sql服務器名?';?'用戶名?';?'密碼?',數據庫名.dbo.表名)select?*from?本地表
  • –更新本地表

update?bset?b.列A=a.列A?from?openrowset(?'SQLOLEDB?',?'sql服務器名?';?'用戶名?';?'密碼?',數據庫名.dbo.表名)as?a?inner?join?本地表?bon?a.column1=b.column1
  • –openquery用法需要創建一個連接

--首先創建一個連接創建鏈接服務器exec?sp_addlinkedserver???'ITSV?',?'?',?'SQLOLEDB?',?'遠程服務器名或ip地址?'
--查詢select?*FROM?openquery(ITSV,??'SELECT?*??FROM?數據庫.dbo.表名?')
--把本地表導入遠程表insert?openquery(ITSV,??'SELECT?*??FROM?數據庫.dbo.表名?')select?*?from?本地表
--更新本地表update?bset?b.列B=a.列BFROM?openquery(ITSV,??'SELECT?*?FROM?數據庫.dbo.表名?')?as?a? inner?join?本地表?b?on?a.列A=b.列A
  • –3、opendatasource/openrowset

SELECT???*FROM???opendatasource(?'SQLOLEDB?',??'Data?Source=ip/ServerName;User?ID=登陸名;Password=密碼?'?).test.dbo.roy_ta --把本地表導入遠程表insert?opendatasource(?'SQLOLEDB?',??'Data?Source=ip/ServerName;User?ID=登陸名;Password=密碼?').數據庫.dbo.表名select?*?from?本地表
SQL Server基本函數 1.字符串函數 長度與分析用 1,datalength(Char_expr) 返回字符串包含字符數,但不包含后面的空格 2,substring(expression,start,length) 取子串,字符串的下標是從“1”,start為起始位置,length為字符串長度,實際應用中以len(expression)取得其長度 3,right(char_expr,int_expr) 返回字符串右邊第int_expr個字符,還用left于之相反 4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作類 5,Sp_addtype自定義數據類型 例如:EXEC sp_addtype birthday, datetime, 'NULL' 6,set nocount {on|off} 使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。如果存儲過程中包含的一些語句并不返回許多實際的數據,則該設置由于大量減少了網絡流量,因此可顯著提高性能。SET NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。
????SET?NOCOUNT? ????為?OFF?時,返回計數 ????常識  ????在SQL查詢中:from后最多可以跟多少張表或視圖:256在SQL語句中出現?Order?by,查詢時,先排序,后取在SQL中,一個字段的最大容量是8000,而對于nvarchar(4000),由于nvarchar是Unicode碼。

相關推薦:

MYSQL經典語句大全——開發篇

MYSQL經典語句大全——開發篇

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享