SQL 更新到 SAP PL-16 后,数据库中已有一个名为“#TEMP”的对象
SQL There is already an object named '#TEMP' in the database after updated to SAP PL-16
我正在使用 SQL 2008 R2,我们今天使用 SAP 更新 PL-16 对其进行了更新。之后我们在我之前开发的应用程序中遇到了问题。
#temp 表中出现错误。
错误:
[SQL Server Native 10.0][SQL Server]There is already an object named
'#TEMP' in the database] FMS
我们尝试了一个解决方案,在每个查询的开头插入 'drop table #temp'...
IF (SELECT object_id('TempDB..#Temp')) IS NOT NULL
BEGIN
DROP TABLE #Temp
END
还是提示同样的错误。有帮助吗?
供参考的Big Query :(
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price' INTO #TEMP
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST]
WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='2'
INSERT INTO #TEMP
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price'
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST] WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='1'
INSERT INTO #TEMP
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2))*(CONVERT(FLOAT,$[.U_KmNsiaa],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price'
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST] WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='3'
SELECT max(T0.PRICE)
FROM #TEMP T0
DROP TABLE #TEMP
这对我来说真的很奇怪。以单个 # 开头的 Temp tables 是会话本地的。所以每个会话都应该能够看到它自己独立定义的#temp table 并在其中拥有自己的数据。可以在会话之间共享带有## 前缀的Temp tables。如果未明确删除,则在使用它的最后一个会话关闭时会自动删除它们。
您是否正在创建临时文件 table、删除它并尝试在同一批次中再次创建它? SQL 解析器不喜欢这样。因此,例如,如果我将以下代码放入管理工作室,然后进行简单的语法检查,它会给我同样的错误,即使它看起来应该是有效的。
drop table #temp
select 1 x into #temp
select * from #temp
drop table #temp
select 2 x into #temp
select * from #temp
它不喜欢第二次尝试创建临时文件 table。
您可以尝试确保创建和删除临时文件 table 的代码在它自己的批处理中,方法是用 GO 语句包围它。 SQL 这个好像没问题:
GO
drop table #temp
select 1 x into #temp
select * from #temp
drop table #temp
GO
select 2 x into #temp
select * from #temp
GO
我正在使用 SQL 2008 R2,我们今天使用 SAP 更新 PL-16 对其进行了更新。之后我们在我之前开发的应用程序中遇到了问题。
#temp 表中出现错误。
错误:
[SQL Server Native 10.0][SQL Server]There is already an object named '#TEMP' in the database] FMS
IF (SELECT object_id('TempDB..#Temp')) IS NOT NULL
BEGIN
DROP TABLE #Temp
END
还是提示同样的错误。有帮助吗?
供参考的Big Query :(
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price' INTO #TEMP
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST]
WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='2'
INSERT INTO #TEMP
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2]/(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price'
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST] WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='1'
INSERT INTO #TEMP
SELECT CASE
WHEN (CONVERT(FLOAT,$[.11]) >0
AND convert(float,$[.11],2) >= convert(float,t0.[U_FQuantity],2)
AND convert(float,$[.11],2) <= convert(float,t0.[U_LQuantity],2)) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_mishkal],2) >0
AND $[rdr1.U_mishkal] >= t0.[U_FWeight]
AND $[rdr1.U_mishkal] <= t0.[U_LWeight]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_kmNsiaa],2) >0
AND $[rdr1.U_kmNsiaa] >= t0.[U_Fkm]
AND $[rdr1.U_kmNsiaa] <= t0.[U_Lkm]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Nefach],2) >0
AND $[rdr1.U_Nefach] >= t0.[U_FVolume]
AND $[rdr1.U_Nefach] <= t0.[U_LVolume]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Point],2) >0
AND $[rdr1.U_Point] >= t0.[U_FPoint]
AND $[rdr1.U_Point] <= t0.[U_LPoint]) THEN T0.[U_Price2] /(CONVERT(FLOAT,$[.11],2))*(CONVERT(FLOAT,$[.U_KmNsiaa],2)) *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
WHEN (CONVERT(FLOAT,$[rdr1.U_Hamtana],2) >0
AND $[rdr1.U_Hamtana] >= t0.[U_FHamtana]
AND $[rdr1.U_Hamtana] <= t0.[U_LHamtana]) THEN T0.[U_Price2] *(1-CAST($[.28] AS DECIMAL(18,6)) /100)
END AS 'price'
FROM [dbo].[@PRICELIST] T0
INNER JOIN [dbo].[OITM] T1 ON T0.[U_ItemCode]=T1.[U_ZPRICELIST] WHERE T0.[U_Cardcode] = $[ORDR.U_PCARDCODE.0]
AND T1.[ItemCode] = $[.1]
AND T0.[U_SugMitan] =$[rdr1.U_SugMitan.1]
AND T0.[U_SugRehev] = $[Rdr1.U_SugRehev.1]
AND t0.U_SugHishuv='3'
SELECT max(T0.PRICE)
FROM #TEMP T0
DROP TABLE #TEMP
这对我来说真的很奇怪。以单个 # 开头的 Temp tables 是会话本地的。所以每个会话都应该能够看到它自己独立定义的#temp table 并在其中拥有自己的数据。可以在会话之间共享带有## 前缀的Temp tables。如果未明确删除,则在使用它的最后一个会话关闭时会自动删除它们。
您是否正在创建临时文件 table、删除它并尝试在同一批次中再次创建它? SQL 解析器不喜欢这样。因此,例如,如果我将以下代码放入管理工作室,然后进行简单的语法检查,它会给我同样的错误,即使它看起来应该是有效的。
drop table #temp
select 1 x into #temp
select * from #temp
drop table #temp
select 2 x into #temp
select * from #temp
它不喜欢第二次尝试创建临时文件 table。
您可以尝试确保创建和删除临时文件 table 的代码在它自己的批处理中,方法是用 GO 语句包围它。 SQL 这个好像没问题:
GO
drop table #temp
select 1 x into #temp
select * from #temp
drop table #temp
GO
select 2 x into #temp
select * from #temp
GO