我刚开始使用存储过程。我有两个问题。
当我使用新名称创建一个对象时,它可以成功运行但是没有表格出现......它在哪里?
当我再次执行时,我收到错误
已经有一个名为' ## 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
感谢您的帮助,如果代码出现更多问题,请告诉我,我正在努力学习。
答案 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 ?? --
),则必须在此之前删除表。