コンテンツにスキップ

Transact-SQL

Xuất điển: フリー bách khoa sự điển 『ウィキペディア ( Wikipedia ) 』

Transact-SQL(T-SQL) は,マイクロソフトSybaseが độc tự に拡 trương したSQLNgôn ngữ である. マイクロソフトによる thật trang はMicrosoft SQL Serverとして xuất hà されている. Sybase ではこの ngôn ngữ を Sybase SQL Server の hậu 継であるAdaptive Server Enterpriseで sử っている.

SQL を cường hóa するため, thứ のような cơ năng が truy gia されている.

  • Chế ngự フロー ngôn ngữ
  • Cục sở 変 sổ
  • グローバル変 sổ
  • Văn tự liệt 処 lý, データ処 lý, sổ trị 処 lý のための các chủng quan sổ.
  • DELETE văn とUPDATE văn の cường hóa

Chế ngự フロー ngôn ngữ

[Biên tập]

Transact-SQL の chế ngự フローのためのキーワードとしては,BEGINEND,BREAK,CONTINUE,GOTO,IFELSE,RETURN,WAITFOR,WHILEがある.

IFELSEによって điều kiện phó thật hành が khả năng となる. Lệ えば, nhật phó が chu mạt であれば "weekend" と biểu kỳ し, そうでなければ "weekday" と biểu kỳ するといった処 lý が khả năng である.

IFDATEPART(dw,GETDATE())=7ORDATEPART(dw,GETDATE())=1
PRINT'It is the weekend.'
ELSE
PRINT'It is a weekday.'

BEGINENDは văn のブロック hóa を khả năng とする. Lệ えば, thượng ký のコードで phục sổ の văn を điều kiện phó で thật hành する tràng hợp, BEGIN と END を sử って thứ のように thư く.

IFDATEPART(dw,GETDATE())=7ORDATEPART(dw,GETDATE())=1
BEGIN
PRINT'It is the weekend.'
PRINT'Get some rest!'
END
ELSE
BEGIN
PRINT'It is a weekday.'
PRINT'Get to work!'
END

WAITFORは, chỉ định された thời gian だけ đãi つか, chỉ định された thời khắc まで đãi つ. Trì diên chế ngự に sử ったり, chỉ định thời khắc まで thật hành をブロックするのに sử われる.

RETURNは,ストアドプロシージャや quan sổ から tức tọa に lệ るときに sử う.

BREAKWHILEループからの thoát xuất,CONTINUEはループの thứ の sào り phản しへの phi び việt しである.WHILEループの lệ は hạ ký にある.

Cục sở 変 sổ

[Biên tập]

Cục sở 変 sổ は thật hành trung のスクリプト nội でのみ sử われる. Transact-SQL はユーザー định nghĩa の quảng vực 変 sổ をサポートしていない.

DECLAREによって変 sổ danh と hình を chỉ định して変 sổ を tuyên ngôn する. SET văn で trị を đại nhập し, その hậu の văn で変 sổ danh を sử うことでその trị を tham chiếu できる.

Thứ のスクリプトは chỉnh sổ の変 sổ を tuyên ngôn し, trị を sơ kỳ hóa し,WHILEループで処 lý を thật hành している.

DECLARE@CounterINT
SET@Counter=10
WHILE@Counter>0
BEGIN
PRINT'The count is '+CONVERT(VARCHAR(10),@Counter)
SET@Counter=@Counter-1
END

このループ bổn thể は, 変 sổ の trị を hàm むメッセージを biểu kỳ し, その trị をデクリメントするものである.

変 sổ の sơ kỳ hóa は thứ のようにもできる.

DECLARE@ArticleCountINT
SELECT@ArticleCount=COUNT(*)FROMArticles

INSERTINTOSizeLog(SampleTime,ArticleCount)VALUES(GETDATE(),@ArticleCount)

これは, Articles biểu の hành sổ を thủ đắc し, その trị と hiện tại thời khắc を SizeLog biểu の hành として挿 nhập するものである.

グローバル変 sổ

[Biên tập]

グローバル変 sổ は thật hành trung のスクリプト nội での dạng 々なステータスを giam thị ・ thủ đắc ができる. Transact-SQLではグローバル変 sổ は chủ として@@で thư き thủy める.

Lương く sử われるグローバル変 sổ としては dĩ hạ のものがある.

@@ERRORTrực tiền に thật hành したクエリのエラー trạng thái を bảo trì

@@ROWCOUNTTrực tiền に thật hành したクエリの処 lý sổ を bảo trì

@@FETCH_STATUSHiện tại thật hành trung のカーソルのFETCH trạng thái を bảo trì (@@FETCH_STATUS = 0の tràng hợp, chính thường chung liễu )

Hạ ký にグローバル変 sổ を lợi dụng したエラー処 lý の lệ を kỳ す

  • クエリ thật hành thời のエラーハンドリング
DECLARE@ERROR_STATUSINT
SET@ERROR_STATUS=0

SELECTDATE
FROMCALENDARWITH(NOLOCK)
WHEREYEAR='2007'ANDMONTH='01'

--グローバル変 sổ@@ERRORにて trực tiền のクエリのエラー trạng huống を thủ đắc
--0の tràng hợp はエラーなし
SET@ERROR_STATUS=@@ERROR

IF@ERROR_STATUS<>0
BEGIN
PRINT'ERROR OCCURD'
RETURN
END
  • UPDATE thật hành thời の cai đương kiện sổ が vô かった tràng hợp のエラーハンドリング
DECLARE@ROW_COUNTINT
SET@ROW_COUNT=0

UPDATECALENDAR
SETDATE=GETDATE()
WHEREYEAR='2007'ANDMONTH='01'

--グローバル変 sổ@@ROWCOUNTにて trực tiền のクエリの kết quả kiện sổ を thủ đắc
SET@ROW_COUNT=@@ROWCOUNT

IF@ROW_COUNT=0
BEGIN
PRINT'NO RECORD UPDATED'
RETURN
END

DELETE văn とUPDATE văn の変 canh

[Biên tập]

Transact-SQL では, DELETE văn とUPDATE văn にFROM tiết を chỉ định khả năng となっている.

Thứ の lệ では, 'Idle' フラグの lập っている toàn てのusersを tước trừ する.

DELETEFROMusersasu
JOINuser_flagsasf
ONu.id=f.id
WHEREf.name='Idle'

カーソルの thật trang

[Biên tập]

Transact-SQL では,CURSORを sử dụng することで, テーブルを trục thứ 処 lý することが khả năng である.

Thứ の lệ では,CURSORを lợi dụng し,CALENDARテーブルを điều kiện phân けしながら canh tân する処 lý である.

--カーソルの định nghĩa
DECLARE
CUR_CALENDAR_UPDATE
CURSORFOR
SELECT
YEAR,
MONTH,
DAY
FROM
CALENDAR

--変 sổ tuyên ngôn/Sơ kỳ hóa
DECLARE@wk_yearCHAR(4)
DECLARE@wk_monthVARCHAR(2)
DECLARE@wk_dayVARCHAR(2)

SET@wk_year=''
SET@wk_month=''
SET@wk_day=''


--カーソルを khai く
OPENCUR_CALENDAR_UPDATE


--カーソルより tối sơ の1 hành を thủ đắc
FETCHNEXTFROM
CUR_CALENDAR_UPDATE
INTO
@wk_year,
@wk_month,
@wk_day


--カーソルで thủ đắc した hành が chung đoan に đạt するまで処 lý を継続する
WHILE@@FETCH_STATUS=0
BEGIN

--カーソルで thủ đắc したYEARが2006より đại きい tràng hợp は処 lý を hành う
IF@wk_year>2006
BEGIN
UPDATE
CALENDAR
SET
DATE=GETDATE()
WHERE
YEAR=@wk_year
AND
MONTH=@wk_month
AND
DAY=@wk_day
END

--Thứ の1 kiện を thủ đắc する
FETCHNEXTFROM
CUR_CALENDAR_UPDATE
INTO
@wk_year,
@wk_month,
@wk_day
END

--カーソルを bế じる
CLOSECUR_CALENDAR_UPDATE

--カーソルのメモリを khai phóng
DEALLOCATECUR_CALENDAR_UPDATE

Phê phán

[Biên tập]

Transact-SQL はPL/SQLĐồng dạng, cơ năng を truy gia することで SQL tiêu chuẩn との hỗ hoán tính が tổn なわれているだけでなく, SQLが bổn lai bảo trì すべきモジュール tính を phá 壊していると phê phán されている. Hoán ngôn すれば, Transact-SQL の truy gia cơ năng は phổ thông ならプログラミング ngôn ngữ やMai め込みSQLに thật trang されるべきものである. そのため,Chế ngự cấu tạoをプログラミング ngôn ngữ でも SQL でも chỉ định khả năng になってしまい, hỗn loạn が sinh じる.

Quan liên hạng mục

[Biên tập]

Ngoại bộ リンク

[Biên tập]