Transact-SQL
こ の ký sự はKiểm chứng khả năngなTham khảo văn hiến や xuất xứが toàn く kỳ されていないか, không thập phần です.(2023 năm 1 nguyệt) |
Transact-SQL(T-SQL) は,マイクロソフトとSybaseが một mình に拡 trương したSQLNgôn ngữ である. マイクロソフトによる thật trang はMicrosoft SQL Serverとして ra hà されている. Sybase ではこ の ngôn ngữ を Sybase SQL Server の sau 継であるAdaptive Server Enterpriseで sử っている.
SQL を cường hóa するため, thứ の ような cơ năng が thêm vào されている.
- Chế ngự フロー ngôn ngữ
- Cục sở 変 số
- グローバル変 số
- Văn tự liệt 処 lý, データ処 lý, số trị 処 lý の ため の các loại 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ệ えば, ngày phó が cuối tuần であれば "weekend" と tỏ vẻ し, そうでなければ "weekday" と tỏ vẻ するといった処 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 nhớ の コードで số nhiều の 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ì duyê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 ra,CONTINUE
はループ の thứ の sào り phản しへ の phi び càng しである.WHILE
ループ の lệ は hạ nhớ にある.
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
によって変 vài tên と hình を chỉ định して変 số を tuyên ngôn する. SET văn で trị を đại nhập し, そ の sau の văn で変 vài tên を sử うことでそ の trị を tham chiếu できる.
Thứ の スクリプトは số nguyên の 変 số を tuyên ngôn し, trị を lúc đầu 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 むメッセージを tỏ vẻ し, そ の trị をデクリメントするも の である.
変 số の lúc đầu hóa は thứ の ようにもできる.
DECLARE@ArticleCountINT
SELECT@ArticleCount=COUNT(*)FROMArticles
INSERTINTOSizeLog(SampleTime,ArticleCount)VALUES(GETDATE(),@ArticleCount)
これは, Articles biểu の hành số を lấy đượ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 々なステータスを giám thị ・ lấy được ができる. Transact-SQLではグローバル変 số は chủ として@@で thư き thủy める.
Lương く sử われるグローバル変 số としては dưới の も の がある.
@@ERROR
Thẳng trước に thật hành したクエリ の エラー trạng thái を bảo trì
@@ROWCOUNT
Thẳng trước に 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, bình thường kết thúc )
Hạ nhớ にグローバル変 số を lợi dụng したエラー処 lý の lệ を kỳ す
- クエリ thật thịnh hành の エラーハンドリング
DECLARE@ERROR_STATUSINT
SET@ERROR_STATUS=0
SELECTDATE
FROMCALENDARWITH(NOLOCK)
WHEREYEAR='2007'ANDMONTH='01'
--グローバル変 số@@ERRORにて thẳng trước の クエリ の エラー trạng huống を lấy được
--0の trường hợp はエラーなし
SET@ERROR_STATUS=@@ERROR
IF@ERROR_STATUS<>0
BEGIN
PRINT'ERROR OCCURD'
RETURN
END
- UPDATE thật thịnh hành の phải làm kiện số が vô かった trường hợp の エラーハンドリング
DECLARE@ROW_COUNTINT
SET@ROW_COUNT=0
UPDATECALENDAR
SETDATE=GETDATE()
WHEREYEAR='2007'ANDMONTH='01'
--グローバル変 số@@ROWCOUNTにて thẳng trước の クエリ の kết quả kiện số を lấy được
SET@ROW_COUNT=@@ROWCOUNT
IF@ROW_COUNT=0
BEGIN
PRINT'NO RECORD UPDATED'
RETURN
END
DELETE văn とUPDATE văn の 変 càng
[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
を trừ bỏ する.
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 けしながら đổi mới する処 lý である.
--カーソル の định nghĩa
DECLARE
CUR_CALENDAR_UPDATE
CURSORFOR
SELECT
YEAR,
MONTH,
DAY
FROM
CALENDAR
--変 số tuyên ngôn/Lúc đầu 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
--カーソルより lúc ban đầu の 1 hành を lấy được
FETCHNEXTFROM
CUR_CALENDAR_UPDATE
INTO
@wk_year,
@wk_month,
@wk_day
--カーソルで lấy được した hành が đầu cuối に đạt するまで処 lý を継続する
WHILE@@FETCH_STATUS=0
BEGIN
--カーソルで lấy đượ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 を lấy được する
FETCHNEXTFROM
CUR_CALENDAR_UPDATE
INTO
@wk_year,
@wk_month,
@wk_day
END
--カーソルを bế じる
CLOSECUR_CALENDAR_UPDATE
--カーソル の メモリを mở ra
DEALLOCATECUR_CALENDAR_UPDATE
Phê phán
[Biên tập]Transact-SQL はPL/SQLCùng dạng, cơ năng を thêm vào することで SQL tiêu chuẩn と の trao đổi tính が tổn hại なわれているだけでなく, SQLが vốn dĩ bảo trì すべきモジュール tính を phá 壊していると phê phán されている. Đổi ngôn すれば, Transact-SQL の thêm vào cơ năng は bình thường ならプログラミング ngôn ngữ やChôn め込み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