Sql 几个存储过程问题

Sql 几个存储过程问题,sql,sql-server,Sql,Sql Server,我刚开始使用存储过程。我有两个问题 当我用一个新名称创建一个对象时,它成功地工作了,但没有显示任何表。。。它在哪里 第二,当我再次执行时,我得到一个错误 数据库中已存在名为“##sp#U MemberCertificates”的对象 我正在尝试使用以下方法解决此问题: IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL BEGIN DROP TABLE ##Temp END 但我不知道怎么用这个 CREATE PROCEDURE ##

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

当我用一个新名称创建一个对象时,它成功地工作了,但没有显示任何表。。。它在哪里

第二,当我再次执行时,我得到一个错误

数据库中已存在名为“##sp#U 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

谢谢您的帮助,如果代码中还有其他问题,请告诉我,我正在尝试学习。

使用此命令执行存储过程

将您的过程重命名为usp#U MemberCertificates“##sp#U MemberCertificates”用于临时sp

从过程中删除exec语句

像这样使用exec语句

EXEC usp_成员证书1,'2011-07-19 00:00:00.000','2015-07-19 00:00:00.000'

您不必提及变量名

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

此外,一旦创建了一个过程,您应该添加Alter而不是create to,这样它就不会抛出此错误

中已存在名为“##sp#U MemberCertificates”的对象 数据库


创建全局临时存储过程(使用前缀##)。此存储过程在服务器中的所有会话中都可见。存储过程在tempdb中(正如您已经提到的)。因此,您可以添加
删除过程
,而不是像示例中那样删除表。您还必须
删除
##sp#u成员证书
,而不是
##Temp


第二,在创建过程时,脚本必须以
GO
结束,但在您尝试执行之前(
EXEC##sp#u MemberCertificates@MemberId='1',@FromDate='2011-07-19 00:00:00.000'
,在您的代码中)。另外,如果您打算在
中使用
--use-INTO???
在您的代码中),您必须在这之前删除表。

您真的打算创建一个临时存储过程(请参阅)?创建SP后,需要使用来修改它。此外,您不应将
sp_u
用作SPs的前缀,因为SQL Server将其用于自己的目的;参考:这里要非常小心。您正在创建一个临时过程。而且,您正在从内部调用该过程。第一次运行此操作时,您将遇到最大递归错误。我可以问一下为什么需要创建全局临时存储过程吗?这里的背景是什么?业务需求?您不应该使用
sp
作为存储过程的前缀。请参阅我之前的评论以获取参考。我知道我们应该使用usp_u作为前缀,但我只是想指出他的错误,而不是他的命名约定。您根本不应该使用匈牙利符号(在SQL Server中):;还有更多的意见。有问题的SP可能应该命名为
GetMemberCertificates
。或者我认为该条的普遍共识与我一致。但是我会的,你也会的。更多的意见样本将很有用:)