几个存储过程问题

时间:2014-10-02 20:29:16

标签: sql sql-server

我刚开始使用存储过程。我有两个问题。

当我使用新名称创建一个对象时,它可以成功运行但是没有表格出现......它在哪里?

当我再次执行时,我收到错误

  

已经有一个名为' ## sp_MemberCertificates'在数据库中

我试图通过使用:

来解决这个问题
IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL
BEGIN
    DROP TABLE ##Temp
END

但我不知道如何正确地使用它......

CREATE PROCEDURE ##sp_MemberCertificates (@MemberId int, @FromDate Varchar (30), @ToDate Varchar (30))
    AS
    SELECT  Email,
            CertificateNumber,
            Mem_Name,
            Mem_Address,
            Mem_city,
            Mem_state,
            Mem_cellno,
            Amount,
            DateValid,
            DateSent
    --Use INTO ?? --
    FROM UnitedDiningClub.dbo.UDC_Certificates

    JOIN UnitedDiningClub.dbo.UDC_Member m
    ON m.Mem_ID = UDC_Certificates.MemberId
    JOIN UnitedDiningClub.dbo.UDClub_Client c
    ON c.ClientId = UDC_Certificates.RestaurantId

    WHERE MemberId = @MemberId
    ORDER BY MemberId

    EXEC ##sp_MemberCertificates @MemberId = '1', @FromDate = '2011-07-19 00:00:00.000', @ToDate = '2015-07-19 00:00:00.000'

    go

感谢您的帮助,如果代码出现更多问题,请告诉我,我正在努力学习。

2 个答案:

答案 0 :(得分:0)

使用它来执行存储过程

将您的程序重命名为 usp_MemberCertificates ' ## sp_MemberCertificates'用于临时sp

从您的程序中删除exec语句

使用像这样的exec语句

EXEC usp_MemberCertificates 1, '2011-07-19 00:00:00.000', '2015-07-19 00:00:00.000'

您不必提及变量名称

此外,1是整数,而您发送的是varchar类型

一旦你创建了一个程序,你应该添加Alter而不是Create,这样它就不会抛出这个错误

  

已经有一个名为' ## sp_MemberCertificates'在里面   数据库

答案 1 :(得分:0)

您创建全局临时存储过程(使用前缀##)。从服务器中的所有会话中都可以看到此存储过程。存储过程在Temp DB中(如您所述)。因此,您可以添加DROP PROCEDURE,而不是像示例中那样删除表格。您还必须DROP ##sp_MemberCertificates,而不是##Temp

在创建过程时,脚本必须以GO完成,但在尝试执行代码之前(EXEC ##sp_MemberCertificates @MemberId = '1', @FromDate = '2011-07-19 00:00:00.000')。此外,如果您打算在代码中使用INTO--Use INTO ?? --),则必须在此之前删除表。