Transact-SQL
この ký sự はKiểm chứng khả năngなTham khảo văn hiến や xuất điểnが toàn く kỳ されていないか, bất thập phân です.(2023 niên 1 nguyệt) |
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ự フローのためのキーワードとしては,BEGIN
とEND
,BREAK
,CONTINUE
,GOTO
,IF
とELSE
,RETURN
,WAITFOR
,WHILE
がある.
IF
とELSE
によって đ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.'
BEGIN
とEND
は 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ử う.
BREAK
はWHILE
ループからの 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ạ のものがある.
@@ERROR
Trực tiền に thật hành したクエリのエラー trạng thái を bảo trì
@@ROWCOUNT
Trực tiền に thật hành したクエリの処 lý sổ を bảo trì
@@FETCH_STATUS
Hiệ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]- Adaptive Server Enterprise- Sybase xã によるUNIX hướng けの thật trang
- Microsoft SQL Server- Microsoft xã によるWindows hướng けの thật trang
- SQL