Sql server 2008 r2 在if-else循环中,不能删除相同的临时表
我正在使用if-else语句,我想删除在内部if语句之外创建的临时表,但是当我执行该语句时,我得到的答案是,数据库中已经有一个名为“table”的对象-----------我的代码就像在这里输入代码一样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
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块的末尾