我在一些动态SQL中创建一个临时表。但是当我调用它时会抛出“无效的对象名称'#Settlement_Data_Grouped'”错误。
我假设它是因为动态SQL使用它自己的单独实例?那么它被删除而不能用于外部SQL?它在我使用## Settlement_Data_Grouped或创建表时有效。但是当多个人打电话给sproc时,这没有用。
我想我可以检查表是否存在,但这意味着我必须删除内容,不同的用户可能需要不同的输出,这意味着它不起作用。
那么有没有人有一个解决方案/建议我可以使用多个人可以调用相同的sproc?
答案 0 :(得分:1)
恕我直言,你不需要Dynamic SQL
。您可以像下面的内容一样更改代码,这样可以获得与您尝试完成相同的结果。如果有任何语法错误,请检查。我会为您提供完整的查询,但在您的问题中,您有截图而不是代码。所以就这样了。
如果您想使用
Temp Tables
:
SELECT
......
INTO #Settlement_Data_Grouped
FROM #Settlement_Data
WHERE (Payment_Date < Settlement_Date AND @outputType = 1) ---This will be true when you have @outputType = 1
OR @outputType = 0 ---This will be true when you have @outputType = 0
GROUP BY Part_No
,NAME
,Order_No
,Invoice_No
-------------
SELECT
......
FROM #Settlement_Data_Grouped
如果您想使用
CTE
:
WITH Settlement_Data_Grouped
AS (
SELECT
......
FROM #Settlement_Data
WHERE (Payment_Date < Settlement_Date AND @outputType = 1) ---This will be true when you have @outputType = 1
OR @outputType = 0 ---This will be ture when you have @outputType = 0
GROUP BY Part_No
,NAME
,Order_No
,Invoice_No
)
SELECT
......
FROM Settlement_Data_Grouped
答案 1 :(得分:1)
问题是临时表仅存在于动态SQL执行上下文的范围内。解决它的方法是在动态SQL之外创建临时表,然后插入其中:
CREATE TABLE #Settlement_Data_Grouped (PartNo varchar(50) ......)
INSERT INTO #Settlement_Data_Grouped
EXEC(@selectSQL)