SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
生活随笔
收集整理的這篇文章主要介紹了
SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
--數(shù)據(jù)操作?
?SELECT?--從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列?
INSERT?--向數(shù)據(jù)庫表添加新數(shù)據(jù)行?
DELETE?--從數(shù)據(jù)庫表中刪除數(shù)據(jù)行?
UPDATE?--更新數(shù)據(jù)庫表中的數(shù)據(jù)?
--數(shù)據(jù)定義?
?CREATE?TABLE?--創(chuàng)建一個數(shù)據(jù)庫表?
DROP?TABLE?--從數(shù)據(jù)庫中刪除表?
ALTER?TABLE?--修改數(shù)據(jù)庫表結構?
CREATE?VIEW?--創(chuàng)建一個視圖?
DROP?VIEW?--從數(shù)據(jù)庫中刪除視圖?
CREATE?INDEX?--為數(shù)據(jù)庫表創(chuàng)建一個索引?
DROP?INDEX?--從數(shù)據(jù)庫中刪除索引?
CREATE?PROCEDURE?--創(chuàng)建一個存儲過程?
DROP?PROCEDURE?--從數(shù)據(jù)庫中刪除存儲過程?
CREATE?TRIGGER?--創(chuàng)建一個觸發(fā)器?
DROP?TRIGGER?--從數(shù)據(jù)庫中刪除觸發(fā)器?
CREATE?SCHEMA?--向數(shù)據(jù)庫添加一個新模式?
DROP?SCHEMA?--從數(shù)據(jù)庫中刪除一個模式?
CREATE?DOMAIN?--創(chuàng)建一個數(shù)據(jù)值域?
ALTER?DOMAIN?--改變域定義?
DROP?DOMAIN?--從數(shù)據(jù)庫中刪除一個域?
--數(shù)據(jù)控制?
?GRANT?--授予用戶訪問權限?
DENY?--拒絕用戶訪問?
REVOKE?--解除用戶訪問權限?
--事務控制?
?COMMIT?--結束當前事務?
ROLLBACK?--中止當前事務?
SET?TRANSACTION?--定義當前事務數(shù)據(jù)訪問特征?
--程序化SQL?
?DECLARE?--為查詢設定游標?
EXPLAN?--為查詢描述數(shù)據(jù)訪問計劃?
OPEN?--檢索查詢結果打開一個游標?
FETCH?--檢索一行查詢結果?
CLOSE?--關閉游標?
PREPARE?--為動態(tài)執(zhí)行準備SQL?語句?
EXECUTE?--動態(tài)地執(zhí)行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?秒后才執(zhí)行SELECT?語句?
waitfor?delay?’01:02:03’?
select?*?from?employee?
--例?等到晚上11?點零8?分后才執(zhí)行SELECT?語句?
waitfor?time?’23:08:00’?
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?stocksex?=?'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)?
?---------?子查詢?
?---------?除非能確保內(nèi)層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?--------?修改數(shù)據(jù)庫表結構 ?
?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?--------?實現(xiàn)刪除列的方法(創(chuàng)建新表)?
?alter?table?table_name?drop?constraint?Stockname_default?
?---------?刪除Stockname的default約束?
常用函數(shù)(function) ?
????轉(zhuǎn)換函數(shù)
????convert(數(shù)據(jù)類型,值,格式)
統(tǒng)計函數(shù)?
AVG?--求平均值?
COUNT?--統(tǒng)計數(shù)目?
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()函數(shù)返回表達式中所有數(shù)據(jù)的標準差?
--STDEVP()?
--STDEVP()函數(shù)返回總體標準差 ?
VAR()?
--VAR()函數(shù)返回表達式中所有值的統(tǒng)計變異數(shù) ?
VARP()?
--VARP()函數(shù)返回總體變異數(shù) ?
算術函數(shù) ?
三角函數(shù)?
SIN(float_expression)?--返回以弧度表示的角的正弦?
COS(float_expression)?--返回以弧度表示的角的余弦?
TAN(float_expression)?--返回以弧度表示的角的正切?
COT(float_expression)?--返回以弧度表示的角的余切?
反三角函數(shù)?
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)?
?------把弧度轉(zhuǎn)換為角度返回與表達式相同的數(shù)據(jù)類型可為?
?------INTEGER/MONEY/REAL/FLOAT?類型?
RADIANS(numeric_expression)?
------把角度轉(zhuǎn)換為弧度返回與表達式相同的數(shù)據(jù)類型可為?
?------INTEGER/MONEY/REAL/FLOAT?類型?
EXP(float_expression)?--返回表達式的指數(shù)值?
LOG(float_expression)?--返回表達式的自然對數(shù)值?
LOG10(float_expression)--返回表達式的以10?為底的對數(shù)值?
SQRT(float_expression)?--返回表達式的平方根?
取近似值函數(shù)?
CEILING(numeric_expression)?
-------返回>=表達式的最小整數(shù)返回的數(shù)據(jù)類型與表達式相同可為?
?-------INTEGER/MONEY/REAL/FLOAT?類型?
FLOOR(numeric_expression)?
-------返回<=表達式的最小整數(shù)返回的數(shù)據(jù)類型與表達式相同可為?
?-------INTEGER/MONEY/REAL/FLOAT?類型?
ROUND(numeric_expression)?
-------返回以integer_expression?為精度的四舍五入值返回的數(shù)據(jù)?
?-------類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT?類型?
ABS(numeric_expression)?
-------返回表達式的絕對值返回的數(shù)據(jù)類型與表達式相同可為?
?-------INTEGER/MONEY/REAL/FLOAT?類型?
SIGN(numeric_expression)?
-------測試參數(shù)的正負號返回0?零值1?正數(shù)或-1?負數(shù)返回的數(shù)據(jù)類型?
?-------與表達式相同可為INTEGER/MONEY/REAL/FLOAT?類型?
PI()?-------返回值為π?即3.1415926535897936?
RAND([integer_expression])?
-------用任選的[integer_expression]做種子值得出0-1?間的隨機浮點數(shù)
字符串函數(shù)?
ASCII()?------函數(shù)返回字符表達式最左端字符的ASCII?碼值?
CHAR()?------函數(shù)用于將ASCII?碼轉(zhuǎn)換為字符?
?------如果沒有輸入0?~?255?之間的ASCII?碼值CHAR?函數(shù)會返回一個NULL?值?
LOWER()?------函數(shù)把字符串全部轉(zhuǎn)換為小寫?
UPPER()?------函數(shù)把字符串全部轉(zhuǎn)換為大寫?
STR()?------函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)?
LTRIM()?------函數(shù)把字符串頭部的空格去掉?
RTRIM()?------函數(shù)把字符串尾部的空格去掉?
LEFT(),RIGHT(),SUBSTRING()?--函數(shù)返回部分字符串?
CHARINDEX(),PATINDEX()?--函數(shù)返回字符串中某個指定的子串出現(xiàn)的開始位置?
SOUNDEX()?------函數(shù)返回一個四位字符碼?
?------SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字均只返回0?值?
DIFFERENCE()?------函數(shù)返回由SOUNDEX?函數(shù)返回的兩個字符表達式的值的差異?
?------0?兩個SOUNDEX?函數(shù)返回值的第一個字符不同?
?------1?兩個SOUNDEX?函數(shù)返回值的第一個字符相同?
?------2?兩個SOUNDEX?函數(shù)返回值的第一二個字符相同?
?------3?兩個SOUNDEX?函數(shù)返回值的第一二三個字符相同?
?------4?兩個SOUNDEX?函數(shù)返回值完全相同同?
QUOTENAME()?------函數(shù)返回被特定字符括起來的字符串?
/**//**//**//*select?quotename('abc',?'{')?quotename('abc')?
運行結果如下?
{?
{abc}?[abc]*/?
REPLICATE()?------函數(shù)返回一個重復character_expression?指定次數(shù)的字符串?
/**//**//**//*select?replicate('abc',?3)?replicate(?'abc',?-2)?
運行結果如下?
abcabcabc?NULL*/?
REVERSE()?------函數(shù)將指定的字符串的字符排列順序顛倒?
REPLACE()?------函數(shù)返回被替換了指定子串的字符串?
/**//**//**//*select?replace('abc123g',?'123',?'def')?
運行結果如下?
?
abcdefg*/ ?
SPACE()?------函數(shù)返回一個有指定長度的空白字符串?
STUFF()?------函數(shù)用另一子串替換字符串指定位置長度的子串 ?
數(shù)據(jù)類型轉(zhuǎn)換函數(shù)?
CAST()?函數(shù)語法如下?
CAST()?(?AS?[?length?])?
CONVERT()?函數(shù)語法如下?
CONVERT()?([?length?],?[,?style])?
select?cast(100+99?as?char)?convert(varchar(12),?getdate())?
運行結果如下?
199?Jan?15?2000 ?
日期函數(shù)?
DAY()?------函數(shù)返回date_expression?中的日期值?
MONTH()?------函數(shù)返回date_expression?中的月份值?
YEAR()?------函數(shù)返回date_expression?中的年份值?
DATEADD(?,?,)?
?-----函數(shù)返回指定日期date?加上指定的額外日期間隔number?產(chǎn)生的新日期?
DATEDIFF(?,?,)?
?-----函數(shù)返回兩個指定日期在datepart?方面的不同之處?
DATENAME(?,??------函數(shù)以字符串的形式返回日期的指定部分?
DATEPART(?,??------函數(shù)以整數(shù)值的形式返回日期的指定部分?
GETDATE()?------函數(shù)以DATETIME?的缺省格式返回系統(tǒng)當前的日期和時間 ?
系統(tǒng)函數(shù)?
APP_NAME()?------函數(shù)返回當前執(zhí)行的應用程序的名稱?
COALESCE()?-----函數(shù)返回眾多表達式中第一個非NULL?表達式的值?
COL_LENGTH(<'table_name'>,?<'column_name'>?----函數(shù)返回表中指定字段的長度值?
COL_NAME(,??----函數(shù)返回表中指定字段的名稱即列名?
DATALENGTH()?-----函數(shù)返回數(shù)據(jù)表達式的數(shù)據(jù)的實際長度?
DB_ID(['database_name'])?------函數(shù)返回數(shù)據(jù)庫的編號?
DB_NAME(database_id)?------函數(shù)返回數(shù)據(jù)庫的名稱?
HOST_ID()?-----函數(shù)返回服務器端計算機的名稱?
HOST_NAME()?-----函數(shù)返回服務器端計算機的名稱?
IDENTITY([,?seed?increment])?[AS?column_name])?
?--IDENTITY()?函數(shù)只在SELECT?INTO?語句中使用用于插入一個identity?column列到新表中?
/**//**//**//*select?identity(int,?1,?1)?as?column_name?
?into?newtable?
?from?oldtable*/?
ISDATE()?----函數(shù)判斷所給定的表達式是否為合理日期?
ISNULL(,??--函數(shù)將表達式中的NULL?值用指定值替換?
ISNUMERIC()?----函數(shù)判斷所給定的表達式是否為合理的數(shù)值?
NEWID()?----函數(shù)返回一個UNIQUEIDENTIFIER?類型的數(shù)值?
NULLIF(,??
?----NULLIF?函數(shù)在expression1?與expression2?相等時返回NULL?值若不相等時則返回xpression1?的值?SQL Server中刪除重復數(shù)據(jù)的幾個方法
數(shù)據(jù)庫的使用過程中由于程序方面的問題有時候會碰到重復數(shù)據(jù),重復數(shù)據(jù)導致了數(shù)據(jù)庫部分設置不能正確設置……
方法一
| declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主字段 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0 |
方法二
有兩個意義上的重復記錄,一是完全重復的記錄,也即所有字段均重復的記錄,二是部分關鍵字段重復的記錄,比如Name字段重復,而其他字段不一定重復或都重復可以忽略。
1、對于第一種重復,比較容易解決,使用
| select distinct * from tableName |
就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除
| select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp |
發(fā)生這種重復的原因是表設計不周產(chǎn)生的,增加唯一索引列即可解決。
2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下
假設有重復的字段為Name,Address,要求得到這兩個字段唯一的結果集
| select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2) |
最后一個select即得到了Name,Address不重復的結果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)
查詢分析器不能單步調(diào)試的的原因
具體步驟如下:
1、將服務器【身份驗證】屬性設置成【混合模式】(window與sql身份驗證)
2、在【控制面板】中打開【服務】將【MSSQLSERVER】服務打開【屬性】,選擇【登錄】頁面,將登錄身份設置成服務器本地帳號和該帳號密碼,如administrator,密碼123;
3、重新啟動sqlserver服務,此時的服務指的是【SQL服務管理器】中的SQL SERVER服務;
假設【帳號】設置為administrator
此時達到的效果是:服務器本地帳號administrator與客戶端上的administrator(并且該帳號的密碼要與服務器密碼相同)可以通過【查詢分析器】進行調(diào)試;
如果想讓【其他帳號】也能夠調(diào)試,那么還需要如下設置:
1、在【服務器】上運行dcomcnfg.exe;
2、在【默認安全機制】中【默認訪問權限】右邊點擊【編輯默認值】選擇允許調(diào)試的帳號類型,如users用戶類型,sample帳號有包含users組;
3、重新啟動sqlserver服務;
3、在客戶端上創(chuàng)建與服務帳號密碼一樣的用戶,如sample;
做到這步就可以通過查詢分析器的調(diào)試功能進行單步調(diào)試了。
注:第二步更改“啟動服務帳戶”,在第一次登錄之前,必須更改用戶密碼。
不然,event log:
以當前密碼登錄的嘗試因下列錯誤而宣告失敗:
在第一次登錄之前,必須更改用戶密碼。
轉(zhuǎn)載于:https://www.cnblogs.com/ghd258/archive/2006/02/12/329288.html
總結
以上是生活随笔為你收集整理的SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs 2005 下载,再汉化---没想到
- 下一篇: asp与网站安全的初步构想(1)——操作