2.执行带输入参数的存储过程proc_St
3.编写并执行带输出参数的存储过程proc_STAVG
4.编写3个带输入参数的存储过程并分别执行
5. 用系统存储过程查看刚创建的存储过程的信息、查看存储过程定义的脚本
6. 练习修改存储过程和删除存储过程的语句
(1)编写带输入参数的存储过程proc_St:
打开SMSS,继续使用在实验6中创建的S_C_SC数据库;

打开“新建查询”窗口,输入以下T-SQL语句进行存储过程proc_St的创建;
CREATE PROC proc_St @SSname VARCHAR(20),@SSno VARCHAR(9)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM Student WHERE Sname = @SSname AND Sno=@SSno)
BEGIN
PRINT '没有该学生!'
RETURN
END
ELSE
BEGIN
SELECT Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC
WHERE Student.Sno=SC.Sno and Student.Sno=@SSno
RETURN
END
END

运行后发现系统报对象名(表名)无效,核对后发现所选择的数据库不准确,按照以下操作将数据库从master更改为S_C_SC;

此时T-SQL语句便可正常运行,但是发现有一处Sno报不明确;

检查后发现引用的两个表(Student、SC)中均有Sno,故将此处的Sno明确为Student.Sno即可

执行后顺利创建出名为proc_St的存储过程;

(2)执行带输入参数的存储过程proc_St:
打开“新建查询”窗口,分别输入下列T-SQL语句进行存储过程proc_St的调用;
要求:如果学生选课数据库中存在所指定的学号和姓名的学生,则返回这个学生的信息及选课信息;否则给出“没有该学生”的提示信息;
EXEC proc_St "浦飞白" ,"202008"
EXEC proc_St "唐黄" ,"201908"


我提供的数据库中存在浦飞白,但没有唐黄,功能顺利实现。
(3)编写并执行带输出参数的存储过程proc_STAVG:
打开“新建查询”窗口,输入以下T-SQL语句进行存储过程proc_STAVG的创建;
CREATE PROC proc_STAVG @SSage SMALLINT OUTPUT
AS
SET @SSage = (SELECT AVG(Sage) FROM Student)
PRINT @SSage


可以看见已成功创建;
下面使用T-SQL语句进行该存储过程的调用;
DECLARE @SSage SMALLINT
EXEC proc_STAVG @SSage OUTPUT

经验证,输出的平均年龄无误;
(4)编写3个带输入参数的存储过程并分别执行:
(a).insert_Student
T-SQL语句:
CREATE PROCEDURE insert_Student @SSno CHAR(9),@SSname CHAR(20),@SSex CHAR(2),@SSage SMALLINT,@SSdept CHAR(20)
AS
BEGIN
IF EXISTS (SELECT * FROM Student WHERE Sno=@SSno and Sname = @SSname)
BEGIN
PRINT '该学生已存在!'
RETURN
END
ELSE
BEGIN
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES(@SSno,@SSname,@SSex,@SSdept,@SSage)
RETURN
END
END


成功创建,下面执行——插入一条学生唐黄的信息;
T-SQL语句:
DECLARE @SSno CHAR(9),@SSname CHAR(20),@SSex CHAR(2),@SSage SMALLINT,@SSdept CHAR(20)
EXEC insert_Student @SSno = '201908',@SSname = '唐黄',@SSex = '男',@SSdept = 'CS',@SSage = 21

Student表前后对照:

成功插入;
(b).update_Student
T-SQL语句:
CREATE PROCEDURE update_Student @SSno CHAR(9),@SSname CHAR(20),@SSex CHAR(2),@SSage SMALLINT,@SSdept CHAR(20)
AS
BEGIN
update Student
SET Sname = @SSname,Ssex = @SSex,Sage = @SSage,Sdept = @SSdept
WHERE Sno = @SSno
END


成功创建,下面执行——更新学生唐黄的信息;
T-SQL语句:
DECLARE @SSno CHAR(9),@SSname CHAR(20),@SSex CHAR(2),@SSage SMALLINT,@SSdept CHAR(20)
EXEC update_Student @SSno='201908',@SSname='唐黄',@SSex='男',@SSdept='IS',@SSage=20

“唐黄”信息前后对照(修改年龄为20,专业为IS):


成功更新;
(c).delete_Student
T-SQL语句:
CREATE PROCEDURE delete_Student @SSno CHAR(9)
AS
BEGIN
DELETE
FROM Student
WHERE Sno = @SSno
END


成功创建,下面执行——删除学生唐黄的信息;
T-SQL语句:
DECLARE @SSno CHAR(9)
EXEC delete_Student @SSno = '201908'

Student表前后对照:

(4)用系统存储过程查看刚创建的存储过程的信息、查看存储过程定义的脚本:
T-SQL语句:
SP_HELP proc_St

SP_HELPTEXT insert_Student

(5)练习修改存储过程和删除存储过程的语句:
修改存储过程T-SQL语句:
ALTER PROCEDURE insert_Student(@SSname VARCHAR(50))
AS
SELECT * FROM Student WHERE Sname = @SSname

存储过程insert_Student前后对照(基于SP_HELP):

删除存储过程T-SQL语句:
DROP PROC insert_Student

已成功删除。
本文主要进行了存储过程的设计、创建、使用、修改、删除等操作,详细展示了这一流程。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po