设有商品表(商品编号,商品名,进货单价,销售单价)、销售表(商品编号,销售时间,销售数量)和商品利润表(商品编号,总利润)。设进货单价、销售数量、销售单价和总利润均为整型,商品编号和商品名的类型均为varchar(20)。总利润的默认值为0。请编写完成下列功能的存储过程:根据给定的商品编号修改对应商品的总利润。(10分)

题目

设有商品表(商品编号,商品名,进货单价,销售单价)、销售表(商品编号,销售时间,销售数量)和商品利润表(商品编号,总利润)。设进货单价、销售数量、销售单价和总利润均为整型,商品编号和商品名的类型均为varchar(20)。总利润的默认值为0。请编写完成下列功能的存储过程:根据给定的商品编号修改对应商品的总利润。(10分)


相似考题
参考答案和解析
正确答案:存储过程如下: CREATE PROCEDURE ZLR_UPDATE @SPBH VARCHAR(20) AS DECLARE@JHDJ INT DECLARE@XSDJ INT、 DECLARE@XSSL INT DELARE@ZLRl INT DELARE@ZLR VARCHAR(20) SET@JHDJ=(SELECT进货单价FROM商品 表WHERE商品编号=@SPBH) SET@XSDJ=(SELECT销售单价FROM商品 表WHERE商品编号=@SPBH) SET@XSSIL=(SELECT销售数量FROM商品 表WHERE商品编号=@SPBH) SET@ZLRl=(@XSDJ-@JHDJ)*@XSSL SET@ZLR=CONVERT(VARCHAR@ ZLRl) UPDATE商品利润表SET总利润=@ZLR WHERE商品编号=@SPBH
存储过程如下: CREATE PROCEDURE ZLR_UPDATE @SPBH VARCHAR(20) AS DECLARE@JHDJ INT DECLARE@XSDJ INT、 DECLARE@XSSL INT DELARE@ZLRl INT DELARE@ZLR VARCHAR(20) SET@JHDJ=(SELECT进货单价FROM商品 表WHERE商品编号=@SPBH) SET@XSDJ=(SELECT销售单价FROM商品 表WHERE商品编号=@SPBH) SET@XSSIL=(SELECT销售数量FROM商品 表WHERE商品编号=@SPBH) SET@ZLRl=(@XSDJ-@JHDJ)*@XSSL SET@ZLR=CONVERT(VARCHAR,@ ZLRl) UPDATE商品利润表SET总利润=@ZLR WHERE商品编号=@SPBH
更多“设有商品表(商品编号,商品名,进货单价,销售单价)、销售表(商品编号,销售时间,销售数量)和商品利润 ”相关问题
  • 第1题:

    设某商品经营管理系统使用SQL Server 2000数据库管理系统。在数据库中存在销售明细表,其建表语句为:

    CREATE TABLE销售明细表(

    销售单据编号varchar(8),

    商品编号varchar(8),

    单价money,

    数量int,

    总价money

    ) ,

    为了保证数据的一致性,建有如下触发器:

    CREATE TRIGGER AutoCountSum

    ON销售明细表FOR INSERT,UPDATE

    AS

    DECLARE@UnitPrice money,@Quantity int

    DECLARE@Amount money

    SELECT@UnitPrice=单价,@Quantity=数量

    FROM inserted

    SET@Amount=@UnitPrice*@Quantity

    UPDATE销售明细表SET总价=@Amount

    WHERE销售单据编号IN(SELECT销售单据编号FROM inserted)

    AND商品编号IN(SELECT商品编号FROM inserted)

    ①设系统运行一段时间后此表中有近一百万条记录,此时发现对该表的插入操作速度很慢,请分析插入速度慢的原因。(3分)

    在不改变数据库服务器硬件和表结构、不清理数据的情况下,请说明应如何优化此表的插入操作。(2分)

    ②在解决了①中的问题后,程序员在数据库中执行如下SQL语句:

    SELECT商品编号,sum(总价)FROM销售明细表

    WHERE单价>50

    GROUP BY商品编号

    请在不改变该SQL语句的情况下,给出提高该查询执行效率的方案。(5分)


    正确答案:①inserted表用于存储INSERT和UP DATE语句所影响的行的副本。在一个插入或更新事务处理中新建行被同时添加到inserted表和触发器表中。inserted表中的行是触发器表中新行的副本。当表中有近100万条记录的时候inserted表中也存在大量的数据而触发器要在inserted表中进行查询所以插入的速度会变慢。可以通过删除inserted表中数据的方法来优化插入的速度。 ②该SQL语句的查询结果为:在销售明细表中按照商品编号统计单价大于50的商品的销售总价。在不改变该SQL语句的情况下可以为销售明细表按照“商品编号”建立一个索引来提高查询的效率。
    ①inserted表用于存储INSERT和UP DATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。inserted表中的行是触发器表中新行的副本。当表中有近100万条记录的时候,inserted表中也存在大量的数据,而触发器要在inserted表中进行查询,所以插入的速度会变慢。可以通过删除inserted表中数据的方法来优化插入的速度。 ②该SQL语句的查询结果为:在销售明细表中,按照商品编号统计单价大于50的商品的销售总价。在不改变该SQL语句的情况下,可以为销售明细表按照“商品编号”建立一个索引,来提高查询的效率。

  • 第2题:

    查询单价最高的商品销售情况,查询结果包括商品号、商品名、销售日期、销售数量和销售金额。正确命令是

    A.SELECT商品.商品号,商品名,销售日期,销售数量,销售数量*单价AS销售金额 FROM商品JOIN销售ON商品.商品号=销售.商品号 WHERE单价=(SELECT MAX(单价)FROM商品)

    B.SELECT商品.商品号,商品名,销售日期,销售数量,销售数量*单价AS销售金额 FROM商品JOIN销售ON商品.商品号=销售.商品号 WHERE单价=MAX(单价)

    C.SELECT商品.商品号,商品名,销售日期,销售数量,销售数量*单价AS销售金额 FROM商品JOIN销售WHERE单价=(SELECT MAX(单价)FROM商品)

    D.SELECT商品.商品号,商品名,销售日期,销售数量,销售数量*单价AS销售金额 FROM商品JOIN销售WHERE单价=MAX(单价)


    正确答案:A
    解析:在指定连接字段时可以用WHERE指定连接条件,也可以用超连接关键字JOIN表示普通连接,即只有满足连接条件的记录才出现在查询结果中,但JOIN后面必须用ON子句指定连接条件,故选项C)和D)是错误的,选项B)中的WHERE语句“单价=MAX(单价)”没有指明MAX(单价)这个最大值来自哪个表,故选A)。

  • 第3题:

    查询商品单价在10到50之间,并且日销售数量高于20的商品名,单价,销售日期和销售数量,查询结果按单价降序,正确命令是( )

    A.SELECT商品名,单价,销售日期,销售数量FROM商品JOIN销售 WHERE(单价BETWEEN l0 AND 50)AND销售数量>=20 ORDER BY单价DESC

    B.SELECT商品名,单价,销售日期,销售数量FROM商品JOIN销售 WHERE(单价BETWEEN l0 AND 50)AND销售数量>20

    C.SELECT商品名,单价,销售日期,销售数量FROM商品,销售 WHERE(单价BETWEEN l0 AND 50)AND销售数量>20 ON商品.商品号=销售.商品号ORDER BY单价

    D.SELECT商品名,单价,销售日期,销售数量FROM商品,销售 WHERE(单价BETWEEN l0 AND 50)AND销售数量>20 AND商品,商品号=销售,商品号ORDER BY单价DESC


    正确答案:D
    D。【解析】根据题意,A选项中使用了JOIN但是少了ON语句所以错误;B选项中不仅没有使用ON语句同时也没有使用降序排列,所以B选项错误;C选项中没有使用降序排列;D选项根据题意进行了查询并将查询结果按照降序进行排列,所以正确。

  • 第4题:

    在SQL Server 2008中,有商品表(商品号,商品名,单价)和销售表(商品号,销售时间,销售价格)。现要限制“销售价格”的取值必须在此商品“单价”的0.6倍到1.5倍范围之内,实现这个约束的正确代码是( )。

    A.CHECK(销售价格BETWEEN单价*0.6 AND单价*1.5)

    B.CHECK(销售价格BETWEEN商品表.单价*0.6 AND商品表.单价*1.5)

    C.CREATE TRIGGER tri_Sales ON销售表FOR INSERT,UPDATEAs IF EXISTS(SELECT*FROM INSERTED a JOIN商品表bON a.商品号=b.商品号WHERE销售价格NOT BETWEEN单价*0.6 AND单价*1.5)ROLLBACK

    D.CREATE TRIGGER tri_ales ON销售表INSTEAD OF INSERT,UPDATE ASIF EXISTS( SELECT冰FROM INSERTED a JOIN商品表bON a.商品号=b.商品号WHERE销售价格NOT BETWEEN单价*0.6 AND单价*=1.5)ROLLBACK


    正确答案:C
    FOR指定触发器只有在引发的SQL语句中指定的操作都已成功执行,并且所有的约束检查也成功完成后才执行触发器,这种触发器称为后触发型触发器。INSTEADOF指定执行触发器而不是执行引发触发器执行SQL语句,从而替代触发语句的操作,称这种触发器为前触发型触发器。

  • 第5题:

    查询商品单价在10到50之间、并且日销售数量高于20的商品名、单价、销售日期和销售数量,查询结果按单价降序。正确命令是

    A.SELECT商品名,单价,销售日期,销售数量FROM商品JOIN销售 WHERE(单价BETWEEN 10 AND 50)AND销售数量>20 ORDER BY单价DESC

    B.SELECT商品名,单价,销售日期,销售数量FROM商品JOIN销售 WHERE(单价BETWEEN 10 AND 50)AND销售数量>20 ORDER BY单价

    C.SELECT商品名,单价,销售日期,销售数量FROM商品,销售 WHERE(单价BETWEEN 10 AND 50)AND销售数量>20 ON商品.商品号=销售.商品号ORDER BY单价

    D.SELECT商品名,单价,销售日期,销售数量FROM商品,销售 WHERE(单价BETWEEN 10 AND 50)AND销售数量>20 AND商品.商品号=销售.商品号ORDER BY单价DESC


    正确答案:D
    解析:按单价降序排列应在ORDER BY后跟DESC短语,因此排除B)和C)选项。选行多表查询时,指定两表关键字进行连接时,JOIN短语必须与ON短语联合使用,故选项A)错误。