コンテンツにスキップ

Transact-SQL

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

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ự フロー の ため の キーワードとしては,BEGINEND,BREAK,CONTINUE,GOTO,IFELSE,RETURN,WAITFOR,WHILEがある.

IFELSEによって đ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.'

BEGINENDは 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ử う.

BREAKWHILEループから の 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 の も の がある.

@@ERRORThẳng trước に thật hành したクエリ の エラー trạng thái を bảo trì

@@ROWCOUNTThẳng trước に 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, 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]

Phần ngoài リンク

[Biên tập]