感谢您的耐心等待......我不是SQL方面的专家,非常感谢您的帮助。 使用SQL Server 2005
两个表格 - Leads
和Meetings
。我正在尝试使用If Exists Update else Insert来更新/创建记录。
我在Leads_ID
表中有一个Meeting
列,并使用它来检查会员表中是否有记录,如果它确实更新,否则插入。
运行此SP我得到'expected参数'@ID',这是没有提供'错误,但是我传递了ID,不是吗?
ALTER PROCEDURE [dbo].[leadfollowup]
@ID AS NVARCHAR(55),
@NAME AS nvarchar (50)
AS
IF EXISTS(SELECT * FROM MEETINGS WHERE LEADS_ID = @ID)
BEGIN
SET NOCOUNT ON;
UPDATE MEETINGS SET name = (SELECT TOP 1 FIRST_NAME FROM LEADS ORDER BY DATE_MODIFIED DESC)
WHERE LEADS_ID = @ID
IF @@ROWCOUNT=0
INSERT INTO MEETINGS (LEADS_ID,NAME)
SELECT TOP 1 L.ID, first_name +' '+Last_name +' 'as NAME
FROM LEADS_CSTM lc
JOIN LEADS l on l.id = lc.id_c WHERE FOLLOW_UP_DATE_C >getdate()
ORDER BY l.date_modified Desc
END
感谢您的帮助。
答案 0 :(得分:1)
ALTER PROCEDURE [dbo].[leadfollowup]
@ID AS NVARCHAR(55),
@NAME AS nvarchar (50)
AS
SET NOCOUNT ON;
IF EXISTS(SELECT LEADS_ID FROM MEETINGS WHERE LEADS_ID = @ID)
BEGIN
UPDATE MEETINGS SET name = (SELECT TOP 1 FIRST_NAME FROM LEADS ORDER BY DATE_MODIFIED DESC)
WHERE LEADS_ID = @ID
END
ELSE
BEGIN
INSERT INTO MEETINGS (LEADS_ID,NAME)
SELECT TOP 1 L.ID, first_name +' '+Last_name +' 'as NAME
FROM LEADS_CSTM lc
JOIN LEADS l on l.id = lc.id_c WHERE FOLLOW_UP_DATE_C >getdate()
ORDER BY l.date_modified Desc
END
答案 1 :(得分:0)
假设我正确阅读你的过程,你的逻辑是
如果会议表中的某一行与潜在客户ID相匹配,那么我们将会做“一堆垃圾”。如果会议不存在,则没有其他条款。
我不认为这与你的问题有关,但这是我第一次跳出来。我用proc来猜测你的意图并使用BEGIN / END procs重置代码,使其明确显示块的位置
ALTER PROCEDURE [dbo].[leadfollowup]
@ID AS NVARCHAR(55),
-- this parameter is never used
@NAME AS nvarchar (50)
AS
BEGIN
SET NOCOUNT ON
IF EXISTS(SELECT * FROM MEETINGS WHERE LEADS_ID = @ID)
BEGIN
SET NOCOUNT ON;
UPDATE
MEETINGS
SET name =
-- this logic probably is incorrect in a concurrent system
(SELECT TOP 1 FIRST_NAME FROM LEADS ORDER BY DATE_MODIFIED DESC)
-- this is also probably where you'd use @name parameter
WHERE LEADS_ID = @ID
END
ELSE
BEGIN
INSERT INTO
MEETINGS
(
LEADS_ID
, NAME
)
SELECT TOP 1
L.ID
, first_name +' '+Last_name +' 'as NAME
FROM LEADS_CSTM lc
JOIN LEADS l
ON l.id = lc.id_c
WHERE
FOLLOW_UP_DATE_C >getdate()
ORDER BY
l.date_modified Desc
END
END
答案 2 :(得分:0)
这就是我想出来的作品......我不知道它是否是最好的答案。
ALTER PROCEDURE [dbo].[leadfollowup]
AS
Declare @ID NVARCHAR (55)
set @ID = (Select top 1 ID from leads order by Date_Modified desc)
Declare @NAME NVARCHAR (50)
set @NAME = (select top 1 first_name +' '+Last_name +' 'as NAME from leads order by Date_Modified desc)
SET NOCOUNT ON;
SELECT LEADS_ID FROM MEETINGS WHERE LEADS_ID = (Select top 1 ID from leads order by Date_Modified desc)
IF EXISTS(SELECT LEADS_ID FROM MEETINGS WHERE LEADS_ID = @ID )
BEGIN
UPDATE MEETINGS SET name = @NAME WHERE ID = @ID
END
ELSE
BEGIN
INSERT INTO MEETINGS (leads_ID,Name)
values(@ID,@NAME)
END