Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 更新else Insert-预期未提供的参数错误_Sql Server 2005_Insert_If Statement - Fatal编程技术网

Sql server 2005 更新else Insert-预期未提供的参数错误

Sql server 2005 更新else Insert-预期未提供的参数错误,sql-server-2005,insert,if-statement,Sql Server 2005,Insert,If Statement,谢谢你的耐心。。。我不是SQL方面的专家,非常感谢您的帮助。 使用SQLServer2005 两个表格-潜在客户和会议。我正在尝试使用If Exists update else Insert更新/创建记录 我在会议表中有一个Leads\u ID列,并使用该列检查lead在会议表中是否有记录,如果该记录更新,则插入 运行此SP时,我会收到“预期参数'@ID',该参数未提供”错误,但我正在传递ID,不是吗 ALTER PROCEDURE [dbo].[leadfollowup] @ID AS

谢谢你的耐心。。。我不是SQL方面的专家,非常感谢您的帮助。 使用SQLServer2005

两个表格-
潜在客户
会议
。我正在尝试使用If Exists update else Insert更新/创建记录

我在
会议
表中有一个
Leads\u ID
列,并使用该列检查lead在会议表中是否有记录,如果该记录更新,则插入

运行此SP时,我会收到“预期参数'@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 

谢谢你的帮助

假设我正确阅读了您的程序,您的逻辑是

如果会议表中有一行在leads id上与参数匹配,我们将执行“一堆垃圾”。如果会议不存在,则没有其他条款

我不认为这与你的问题有关,但这是我首先想到的。我猜测了一下您对proc的意图,并使用BEGIN/END proc重置代码,以明确块的位置

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 

这就是我想出的有效的方法。。。我不知道这是否是最好的答案

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 
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