国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
SQL Server創(chuàng)建存儲(chǔ)過(guò)程與擴(kuò)展存儲(chǔ)過(guò)程的應(yīng)用
什么是存儲(chǔ)過(guò)程?
q       存儲(chǔ)過(guò)程(procedure)類(lèi)似于C語(yǔ)言中的函數(shù)
q       用來(lái)執(zhí)行管理任務(wù)或應(yīng)用復(fù)雜的業(yè)務(wù)規(guī)則
q       存儲(chǔ)過(guò)程可以帶參數(shù),也可以返回結(jié)果
q       存儲(chǔ)過(guò)程可以包含數(shù)據(jù)操縱語(yǔ)句、變量、邏輯 控制語(yǔ)句等
存儲(chǔ)過(guò)程的優(yōu)點(diǎn)
(1)執(zhí)行速度快。
存儲(chǔ)過(guò)程創(chuàng)建是就已經(jīng)通過(guò)語(yǔ)法檢查和性能優(yōu)化,在執(zhí)行時(shí)無(wú)需每次編譯。
存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器,性能高。
(2)允許模塊化設(shè)計(jì)。
只需創(chuàng)建存儲(chǔ)過(guò)程一次并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,以后即可在程序中調(diào)用該過(guò)程任意次。存儲(chǔ)過(guò)程可由在數(shù)據(jù)庫(kù)編程方面有專(zhuān)長(zhǎng)的人員創(chuàng)建,并可獨(dú)立于程序源代碼而單獨(dú)修改 。
(3)提高系統(tǒng)安全性。
可將存儲(chǔ)過(guò)程作為用戶(hù)存取數(shù)據(jù)的管道。可以限制用戶(hù)對(duì)數(shù)據(jù)表的存取權(quán)限,建立特定的存儲(chǔ)過(guò)程供用戶(hù)使用,完成對(duì)數(shù)據(jù)的訪問(wèn)。
存儲(chǔ)過(guò)程的定義文本可以被加密,使用戶(hù)不能查看其內(nèi)容。
(4)減少網(wǎng)絡(luò)流量:
一個(gè)需要數(shù)百行Transact-SQL代碼的操作由一條執(zhí)行過(guò)程代碼的單獨(dú)語(yǔ)句就可實(shí)現(xiàn),而不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼。
存儲(chǔ)過(guò)程的分類(lèi)
q       系統(tǒng)存儲(chǔ)過(guò)程
q       由系統(tǒng)定義,存放在master數(shù)據(jù)庫(kù)中
q       類(lèi)似C語(yǔ)言中的系統(tǒng)函數(shù)
q       系統(tǒng)存儲(chǔ)過(guò)程的名稱(chēng)都以“sp_”開(kāi)頭或”xp_”開(kāi)頭
q       用戶(hù)自定義存儲(chǔ)過(guò)程
q       由用戶(hù)在自己的數(shù)據(jù)庫(kù)中創(chuàng)建的存儲(chǔ)過(guò)程
q       類(lèi)似C語(yǔ)言中的用戶(hù)自定義函數(shù)
常用的系統(tǒng)存儲(chǔ)過(guò)程
系統(tǒng)存儲(chǔ)過(guò)程
說(shuō)明
sp_databases
列出服務(wù)器上的所有數(shù)據(jù)庫(kù)。
sp_helpdb
報(bào)告有關(guān)指定數(shù)據(jù)庫(kù)或所有數(shù)據(jù)庫(kù)的信息
sp_renamedb
更改數(shù)據(jù)庫(kù)的名稱(chēng)
sp_tables
返回當(dāng)前環(huán)境下可查詢(xún)的對(duì)象的列表
sp_columns
回某個(gè)表列的信息
sp_help
查看某個(gè)表的所有信息
sp_helpconstraint
查看某個(gè)表的約束
sp_helpindex
查看某個(gè)表的索引
sp_stored_procedures
列出當(dāng)前環(huán)境中的所有存儲(chǔ)過(guò)程。
sp_password
添加或修改登錄帳戶(hù)的密碼。
sp_helptext
顯示默認(rèn)值、未加密的存儲(chǔ)過(guò)程、用戶(hù)定義的存儲(chǔ)過(guò)程、觸發(fā)器或視圖的實(shí)際文本。
EXEC sp_databases /*列出當(dāng)前系統(tǒng)中的數(shù)據(jù)庫(kù)*/
EXEC  sp_renamedb 'Northwind','Northwind1' /*修改數(shù)據(jù)庫(kù)的名稱(chēng)(單用戶(hù)訪問(wèn), 最簡(jiǎn)單的辦法就是執(zhí)行SQL語(yǔ)句時(shí)關(guān)掉企業(yè)管理器)*/
USE stuDB
GO
EXEC sp_tables /*當(dāng)前數(shù)據(jù)庫(kù)中查詢(xún)的對(duì)象的列表*/
EXEC sp_columns stuInfo /*返回某個(gè)表列的信息*/
EXEC sp_help stuInfo /*查看表stuInfo的信息*/
EXEC sp_helpconstraint stuInfo /*查看表stuInfo的約束*/
EXEC sp_helpindex stuMarks /*查看表stuMarks的索引*/
EXEC sp_helptext 'view_stuInfo_stuMarks' /*查看視圖的語(yǔ)句文本*/
EXEC sp_stored_procedures  /*查看當(dāng)前數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程*/
常用的擴(kuò)展存儲(chǔ)過(guò)程
q       常用的擴(kuò)展存儲(chǔ)過(guò)程:xp_cmdshell
q       可以執(zhí)行DOS命令下的一些的操作
q       以文本行方式返回任何輸出
q       調(diào)用語(yǔ)法:
q         EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
USE master
GO
EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT /*創(chuàng)建文件夾D:\bank*/
IF EXISTS(SELECT * FROM sysdatabases
WHERE name='bankDB')
DROP DATABASE bankDB
GO
CREATE DATABASE bankDB
(
)
GO
EXEC xp_cmdshell 'dir D:\bank\' --查看文件 /*查看文件夾D:\bank*/
如何創(chuàng)建存儲(chǔ)過(guò)程?
q       定義存儲(chǔ)過(guò)程的語(yǔ)法
CREATE  PROC[EDURE]  存儲(chǔ)過(guò)程名
@參數(shù)1  數(shù)據(jù)類(lèi)型 = 默認(rèn)值,
…… ,
@參數(shù)n  數(shù)據(jù)類(lèi)型 OUTPUT
AS
SQL語(yǔ)句
GO
q       和C語(yǔ)言的函數(shù)一樣,參數(shù)可選
q       參數(shù)分為輸入?yún)?shù)、輸出參數(shù)
q       輸入?yún)?shù)允許有默認(rèn)值
創(chuàng)建不帶參數(shù)的存儲(chǔ)過(guò)程
CREATE PROCEDURE proc_stu /* proc_stu為存儲(chǔ)過(guò)程的名稱(chēng)*/
AS
DECLARE @writtenAvg float,@labAvg float /* 筆試平均分和機(jī)試平均分變量 */
SELECT @writtenAvg=AVG(writtenExam),
@labAvg=AVG(labExam)  FROM stuMarks
print '筆試平均分:'+convert(varchar(5),@writtenAvg)
print '機(jī)試平均分:'+convert(varchar(5),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本班考試成績(jī):優(yōu)秀' /* 顯示考試成績(jī)的等級(jí) */
ELSE
print '本班考試成績(jī):較差'
print '--------------------------------------------------'
print '           參加本次考試沒(méi)有通過(guò)的學(xué)員:'
SELECT stuName,stuInfo.stuNo,writtenExam,labExam /* 顯示未通過(guò)的學(xué)員 */
FROM  stuInfo  INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<60 OR labExam<60
GO
調(diào)用存儲(chǔ)過(guò)程
q       EXECUTE(執(zhí)行)語(yǔ)句用來(lái)調(diào)用存儲(chǔ)過(guò)程
q       調(diào)用的語(yǔ)法
EXEC  過(guò)程名  [參數(shù)]
創(chuàng)建帶參數(shù)的存儲(chǔ)過(guò)程
q       存儲(chǔ)過(guò)程的參數(shù)分兩種:
q       輸入?yún)?shù)
q       輸出參數(shù)
q       輸入?yún)?shù):
用于向存儲(chǔ)過(guò)程傳入值,類(lèi)似C語(yǔ)言的按值傳遞;
q       輸出參數(shù):
用于在調(diào)用存儲(chǔ)過(guò)程后,
返回結(jié)果,類(lèi)似C語(yǔ)言的
按引用傳遞;
帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
問(wèn)題:
修改上例:由于每次考試的難易程度不一樣,每次 筆試和機(jī)試的及格線可能隨時(shí)變化(不再是60分),這導(dǎo)致考試的評(píng)判結(jié)果也相應(yīng)變化。
分析:
在述存儲(chǔ)過(guò)程添加2個(gè)輸入?yún)?shù):
@writtenPass   筆試及格線
@labPass         機(jī)試及格線
CREATE PROCEDURE proc_stu
@writtenPass int = 60,  /*輸入?yún)?shù):筆試及格線*/
@labPass int = 60   /*輸入?yún)?shù):機(jī)試及格線*/
AS
print '--------------------------------------------------'
print '           參加本次考試沒(méi)有通過(guò)的學(xué)員:'
SELECT stuName,stuInfo.stuNo,writtenExam, /*查詢(xún)沒(méi)有通過(guò)考試的學(xué)員*/
labExam  FROM  stuInfo
INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q       調(diào)用帶參數(shù)的存儲(chǔ)過(guò)程
假定本次考試機(jī)試偏難,機(jī)試的及格線定為55分,筆試及格線定為60分
EXEC proc_stu 60,55
--或這樣調(diào)用:
EXEC proc_stu @labPass=55,@writtenPass=60
帶輸出參數(shù)的存儲(chǔ)過(guò)程
q       如果希望調(diào)用存儲(chǔ)過(guò)程后,返回一個(gè)或多個(gè)值,這時(shí)就需要使用輸出(OUTPUT)參數(shù)了
問(wèn)題:
修改上例,返回未通過(guò)考試的學(xué)員人數(shù)。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, /*輸出(返回)參數(shù):表示沒(méi)有通過(guò)的人數(shù)*/
@writtenPass int=60,   /*推薦將默認(rèn)參數(shù)放在最后*/
@labPass int=60
AS
……
SELECT stuName,stuInfo.stuNo,writtenExam, /*統(tǒng)計(jì)并返回沒(méi)有通過(guò)考試的學(xué)員人數(shù)*/
labExam FROM  stuInfo   INNER JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
SELECT @notpassSum=COUNT(stuNo)
FROM stuMarks  WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q       調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程
/*---調(diào)用存儲(chǔ)過(guò)程----*/
DECLARE @sum int /*調(diào)用時(shí)必須帶OUTPUT關(guān)鍵字 ,返回結(jié)果將存放在變量@sum中*/
EXEC proc_stu @sum OUTPUT ,64
print '--------------------------------------------------'
IF @sum>=3 /*后續(xù)語(yǔ)句引用返回結(jié)果*/
print '未通過(guò)人數(shù):'+convert(varchar(5),@sum)+ '人,
超過(guò)60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
ELSE
print '未通過(guò)人數(shù):'+convert(varchar(5),@sum)+ '人,
已控制在60%以下,及格分?jǐn)?shù)線適中'
GO
注意:調(diào)用時(shí)也必須跟隨關(guān)鍵字OUTPUT,否則SQL Server將視為輸入?yún)?shù)。
處理存儲(chǔ)過(guò)程中的錯(cuò)誤
q       可以使用PRINT語(yǔ)句顯示錯(cuò)誤信息,但這 些信息是臨時(shí)的,只能顯示給用戶(hù)
q       RAISERROR 顯示用戶(hù)定義的錯(cuò)誤信息時(shí)
q       可指定嚴(yán)重級(jí)別,
q       設(shè)置系統(tǒng)變量@@ERROR
q       記錄所發(fā)生的錯(cuò)誤等
q       RAISERROR語(yǔ)句的用法如下:
RAISERROR (msg_id | msg_str,severity,
state WITH option[,...n]])
•          msg_id:在sysmessages系統(tǒng)表中指定用戶(hù)定義錯(cuò)誤信息
•          msg_str:用戶(hù)定義的特定信息,最長(zhǎng)255個(gè)字符
•          severity:定義嚴(yán)重性級(jí)別。用戶(hù)可使用的級(jí)別為0–18級(jí)
•          state:表示錯(cuò)誤的狀態(tài),1至127之間的值
•          option:指示是否將錯(cuò)誤記錄到服務(wù)器錯(cuò)誤日志中
RAISERROR 語(yǔ)句每個(gè)參數(shù)的詳細(xì)講解,可以查閱SQL幫助!
問(wèn)題:
完善上例,當(dāng)用戶(hù)調(diào)用存儲(chǔ)過(guò)程時(shí),傳入的及格線參數(shù)不
在0~100之間時(shí),將彈出錯(cuò)誤警告,終止存儲(chǔ)過(guò)程的執(zhí)行。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, --輸出參數(shù)
@writtenPass int=60,  --默認(rèn)參數(shù)放后
@labPass int=60       --默認(rèn)參數(shù)放后
AS
IF (NOT @writtenPass BETWEEN 0 AND 100)
OR (NOT @labPass BETWEEN 0 AND 100)
/*引發(fā)系統(tǒng)錯(cuò)誤,指定錯(cuò)誤的嚴(yán)重級(jí)別16,調(diào)用狀態(tài)為1(默認(rèn)),并影響@@ERROR系統(tǒng)變量的值 */
BEGIN
RAISERROR (‘及格線錯(cuò)誤,請(qǐng)指定0-100之間的分
數(shù),統(tǒng)計(jì)中斷退出',16,1)
RETURN  ---立即返回,退出存儲(chǔ)過(guò)程
END
…..其他語(yǔ)句同上例,略
GO
/*---調(diào)用存儲(chǔ)過(guò)程,測(cè)試RAISERROR語(yǔ)句----*/
DECLARE @sum int,  @t int
EXEC proc_stu @sum OUTPUT ,604   /*筆試及格線誤輸入604分*/
SET @t=@@ERROR
print  '錯(cuò)誤號(hào):'+convert(varchar(5),@t )
IF @t<>0  /*如果執(zhí)行了RAISERROR,系統(tǒng)全局@@ERROR將不等于0,表示出現(xiàn)錯(cuò)誤*/
RETURN  --退出批處理,后續(xù)語(yǔ)句不再執(zhí)行
print '--------------------------------------------------'
IF @sum>=3
print '未通過(guò)人數(shù):'+convert(varchar(5),@sum)+ '人,超過(guò)60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
ELSE
print '未通過(guò)人數(shù):'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分?jǐn)?shù)線適中'
GO
好,我們來(lái)做個(gè)總結(jié):
•          存儲(chǔ)過(guò)程是一組預(yù)編譯的SQL語(yǔ)句,它可以包含數(shù)據(jù)操縱語(yǔ)句、變量、邏輯控制語(yǔ)句等
•          存儲(chǔ)過(guò)程允許帶參數(shù),參數(shù)分為:
–         輸入?yún)?shù)
–         輸出參數(shù)
其中,輸入?yún)?shù)可以有默認(rèn)值。
•          輸入?yún)?shù):可以在調(diào)用時(shí)向存儲(chǔ)過(guò)程傳遞參數(shù),此類(lèi)參數(shù)可用來(lái)向存儲(chǔ)過(guò)程中傳入值
•          輸出參數(shù)從存儲(chǔ)過(guò)程中返回(輸出)值,后面跟隨OUTPUT關(guān)鍵字
•          RAISERROR語(yǔ)句用來(lái)向用戶(hù)報(bào)告錯(cuò)誤
臨時(shí)存儲(chǔ)過(guò)程
SQL Server 支持兩種臨時(shí)過(guò)程:局部臨時(shí)過(guò)程和全局臨時(shí)過(guò)程。局部臨時(shí)過(guò)程只能由創(chuàng)建該過(guò)程的連接使用。全局臨時(shí)過(guò)程則可由所有連接使用。局部臨時(shí)過(guò)程在當(dāng)前會(huì)話結(jié)束 時(shí)自動(dòng)除去。全局臨時(shí)過(guò)程在使用該過(guò)程的最后一個(gè)會(huì)話結(jié)束時(shí)除去。通常是在創(chuàng)建該過(guò)程的會(huì)話結(jié)束時(shí)。
臨時(shí)過(guò)程用 # 和 ## 命名,可以由任何用戶(hù)創(chuàng)建。創(chuàng)建過(guò)程后,局部過(guò)程的所有者是唯一可以使用該過(guò)程的用戶(hù)。執(zhí)行局部臨時(shí)過(guò)程的權(quán)限不能授予其他用戶(hù)。如果創(chuàng)建了全局臨時(shí)過(guò) 程,則所有用戶(hù)均可以訪問(wèn)該過(guò)程,權(quán)限不能顯式廢除。只有在 tempdb 數(shù)據(jù)庫(kù)中具有顯式 CREATE PROCEDURE 權(quán)限的用戶(hù),才可以在該數(shù)據(jù)庫(kù)中顯式創(chuàng)建臨時(shí)過(guò)程(不使用編號(hào)符命名)??梢允谟杌驈U除這些過(guò)程中的權(quán)限。
說(shuō)明 頻繁使用臨時(shí)存儲(chǔ)過(guò)程會(huì)在 tempdb 中的系統(tǒng)表上產(chǎn)生爭(zhēng)用,從而對(duì)性能產(chǎn)生負(fù)面影響。建議使用 sp_executesql 代替。sp_executesql 不在系統(tǒng)表中存儲(chǔ)數(shù)據(jù),因此可以避免這一問(wèn)題。
自動(dòng)執(zhí)行存儲(chǔ)過(guò)程
SQL Server 啟動(dòng)時(shí)可以自動(dòng)執(zhí)行一個(gè)或多個(gè)存儲(chǔ)過(guò)程。這些存儲(chǔ)過(guò)程必須由系統(tǒng)管理員創(chuàng)建,并在 sysadmin 固定服務(wù)器角色下作為后臺(tái)過(guò)程執(zhí)行。這些過(guò)程不能有任何輸入?yún)?shù)。
對(duì)啟動(dòng)過(guò)程的數(shù)目沒(méi)有限制,但是要注意,每個(gè)啟動(dòng)過(guò)程在執(zhí)行時(shí)都會(huì)占用一個(gè)連接。如果必須在啟動(dòng)時(shí)執(zhí)行多個(gè)過(guò)程,但不需要并行執(zhí)行,則可以指定一個(gè)過(guò)程作為啟動(dòng)過(guò)程,讓該過(guò)程調(diào)用其它過(guò)程。這樣就只占用一個(gè)連接。
在啟動(dòng)時(shí)恢復(fù)了最后一個(gè)數(shù)據(jù)庫(kù)后,即開(kāi)始執(zhí)行存儲(chǔ)過(guò)程。若要跳過(guò)這些存儲(chǔ)過(guò)程的執(zhí)行,請(qǐng)將啟動(dòng)參數(shù)指定為跟蹤標(biāo)記 4022。如果以最低配置啟動(dòng) SQL Server(使用 -f 標(biāo)記),則啟動(dòng)存儲(chǔ)過(guò)程也不會(huì)執(zhí)行。
若要?jiǎng)?chuàng)建啟動(dòng)存儲(chǔ)過(guò)程,必須作為 sysadmin 固定服務(wù)器角色的成員登錄,并在 master 數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程。
使用 sp_procoption 可以:
將現(xiàn)有存儲(chǔ)過(guò)程指定為啟動(dòng)過(guò)程。
停止在 SQL Server 啟動(dòng)時(shí)執(zhí)行過(guò)程。
查看 SQL Server 啟動(dòng)時(shí)執(zhí)行的所有過(guò)程的列表。
存儲(chǔ)過(guò)程嵌套
存儲(chǔ)過(guò)程可以嵌套,即一個(gè)存儲(chǔ)過(guò)程可以調(diào)用另一個(gè)存儲(chǔ)過(guò)程。在被調(diào)用過(guò)程開(kāi)始執(zhí)行時(shí),嵌套級(jí)將增加,在被調(diào)用過(guò)程執(zhí)行結(jié)束后,嵌套級(jí)將減少。如果超出最大的嵌套級(jí),會(huì)使整個(gè)調(diào)用過(guò)程鏈?zhǔn)?。可?@@NESTLEVEL 函數(shù)返回當(dāng)前的嵌套級(jí)。
若要估計(jì)編譯后的存儲(chǔ)過(guò)程大小,請(qǐng)使用下列性能監(jiān)視計(jì)數(shù)器。
* 各種分類(lèi)的高速緩存對(duì)象均可以使用這些計(jì)數(shù)器,包括特殊 sql、準(zhǔn)備 sql、過(guò)程、觸發(fā)器等。
sql_statement 限制
除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL 之外(這兩個(gè)語(yǔ)句必須是批處理中僅有的語(yǔ)句),任何 SET 語(yǔ)句均可以在存儲(chǔ)過(guò)程內(nèi)部指定。所選擇的 SET 選項(xiàng)在存儲(chǔ)過(guò)程執(zhí)行過(guò)程中有效,之后恢復(fù)為原來(lái)的設(shè)置。
如果其他用戶(hù)要使用某個(gè)存儲(chǔ)過(guò)程,那么在該存儲(chǔ)過(guò)程內(nèi)部,一些語(yǔ)句使用的對(duì)象名必須使用對(duì)象所有者的名稱(chēng)限定。這些語(yǔ)句包括:
ALTER TABLE
CREATE INDEX
CREATE TABLE
所有 DBCC 語(yǔ)句
DROP TABLE
DROP INDEX
TRUNCATE TABLE
UPDATE STATISTICS
權(quán)限
CREATE PROCEDURE 的權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員和 db_owner 和 db_ddladmin 固定數(shù)據(jù)庫(kù)角色成員。sysadmin 固定服務(wù)器角色成員和 db_owner 固定數(shù)據(jù)庫(kù)角色成員可以將 CREATE PROCEDURE 權(quán)限轉(zhuǎn)讓給其他用戶(hù)。執(zhí)行存儲(chǔ)過(guò)程的權(quán)限授予過(guò)程的所有者,該所有者可以為其它數(shù)據(jù)庫(kù)用戶(hù)設(shè)置執(zhí)行權(quán)限。
示例
A. 使用帶有復(fù)雜 SELECT 語(yǔ)句的簡(jiǎn)單過(guò)程
下面的存儲(chǔ)過(guò)程從四個(gè)表的聯(lián)接中返回所有作者(提供了姓名)、出版的書(shū)籍以及出版社。該存儲(chǔ)過(guò)程不使用任何參數(shù)。
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = \'au_info_all\' AND type = \'P\')
DROP PROCEDURE au_info_all
GO
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
GO
au_info_all 存儲(chǔ)過(guò)程可以通過(guò)以下方法執(zhí)行:
EXECUTE au_info_all
-- Or
EXEC au_info_all
如果該過(guò)程是批處理中的第一條語(yǔ)句,則可使用:
au_info_all
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
面試準(zhǔn)備之SQL 6 —— 存儲(chǔ)過(guò)程
SQL Server中常用的系統(tǒng)存儲(chǔ)過(guò)程
SQL Server 存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程
SQL之存儲(chǔ)過(guò)程詳細(xì)介紹及語(yǔ)法(轉(zhuǎn))
SQL Server——SQL Server存儲(chǔ)過(guò)程與exec簡(jiǎn)單使用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服