Sql server 2008 r2 在if-else循环中,不能删除相同的临时表

Sql server 2008 r2 在if-else循环中,不能删除相同的临时表,sql-server-2008-r2,Sql Server 2008 R2,我正在使用if-else语句,我想删除在内部if语句之外创建的临时表,但是当我执行该语句时,我得到的答案是,数据库中已经有一个名为“table”的对象-----------我的代码就像在这里输入代码一样 DECLARE @RowCount INT; SET @RowCount = 1; IF @RowCount = 1 BEGIN IF OBJECT_ID('tempdb..#Guarantor_Details') IS NOT NULL DROP TABLE #Gu

我正在使用if-else语句,我想删除在内部if语句之外创建的临时表,但是当我执行该语句时,我得到的答案是,数据库中已经有一个名为“table”的对象-----------我的代码就像在这里输入代码一样

DECLARE @RowCount INT;

SET @RowCount = 1;

IF @RowCount = 1
BEGIN
    IF OBJECT_ID('tempdb..#Guarantor_Details') IS NOT NULL
        DROP TABLE #Guarantor_Details

    SELECT DISTINCT TOP 1 GUARANTORS.GUARANTOR_CODE
    INTO #Guarantor_Details
    FROM GUARANTORS
    WHERE ISNULL(GUARANTORS.deleted, 0) <> 1;

    DECLARE @GuarantorCount INT;

    SELECT @GuarantorCount = count(*)
    FROM #Guarantor_Details;

    IF (@GuarantorCount = 0)
        DROP TABLE #Guarantor_Details

    BEGIN
        IF OBJECT_ID('tempdb..#Guarantor_Details') IS NOT NULL
            SELECT TOP 1 CLIENT.Last_Name
            INTO #Guarantor_Details
            FROM CLIENT
            LEFT JOIN GUARANTORS ON GUARANTORS.GUARANTOR_CODE = CLIENT.Financial_Guarantor
    END
END
------------------------------------------------------------------------

您不需要执行这种类型的创建/删除操作。您可以而且可能应该在循环之前创建表,并在需要重置时简单地截断表或从临时表中删除表。只需选择一个既适合担保人代码又适合姓氏的数据类型

当INSERT操作中的@ROWCOUNT已包含该值时,也不需要对表执行SELECT COUNT*

基本上:

CREATE TABLE #Guarantor_Details (Value NVARCHAR(50));

WHILE (something)
BEGIN

  IF (@RowCount = 1)
  BEGIN
    TRUNCATE TABLE #Guarantor_Details;

    INSERT INTO #Guarantor_Details (Value)
      SELECT DISTINCT TOP 1 GUARANTORS.GUARANTOR_CODE
      FROM GUARANTORS
      WHERE ISNULL(GUARANTORS.deleted, 0) <> 1;

    IF (@@ROWCOUNT = 0)
    BEGIN
      INSERT INTO #Guarantor_Details (Value)
        SELECT TOP 1 CLIENT.Last_Name
        FROM CLIENT
        LEFT JOIN GUARANTORS
               ON GUARANTORS.GUARANTOR_CODE = CLIENT.Financial_Guarantor;
    END;
END;
仅供参考,原始代码中似乎存在一些逻辑问题:

IF@RowCount=1块底部的开始/结束标记与任何IF或WHILE都没有关联。这在技术上是可以的,但通常意味着缺少一些东西

如果此代码是所有代码,则If@RowCount=1在循环中不起作用,除非有什么东西将@RowCount设置为超出此问题中未显示的外部If块的末尾