Sql 几个存储过程问题
我刚开始使用存储过程。我有两个问题 当我用一个新名称创建一个对象时,它成功地工作了,但没有显示任何表。。。它在哪里 第二,当我再次执行时,我得到一个错误 数据库中已存在名为“##sp#U MemberCertificates”的对象 我正在尝试使用以下方法解决此问题: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 ##
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
。或者我认为该条的普遍共识与我一致。但是我会的,你也会的。更多的意见样本将很有用:)