繁体   English   中英

存储过程中临时表的对象名称无效

[英]Invalid Object Name for Temp Table in Stored Procedure

我正在尝试使用临时表来更新存储过程中的数据库表。

我的客户抛出一个关于非法空值的错误,所以我尝试在 SSMS 中进行测试,它告诉我临时表的名称无效(无论我命名它)。

如果我运行开头并将INSERT INTO SERVICE SELECT S.*更改为简单的SELECT S.*并在声明和定义 @OldServicesString 之后运行代码(因此我可以省略ALTER/CREATE PROCEDURE行),它会完全按预期运行。

这是SP的开头:

ALTER PROCEDURE [dbo].[app_CreateNewServicesOldFSD] (@OldServicesStr nvarchar(max)) AS
SET NOCOUNT ON

DECLARE @User char(10) = (SELECT TOP 1 CREATED_BY_USER FROM BATCHLOG WHERE BPROCESS_ID = 3 ORDER BY ID DESC);
DECLARE @LastOldService int = (SELECT MAX(ID) FROM SERVICE);

SELECT TOP 0 * INTO #Service FROM SERVICE;
ALTER TABLE #Service
DROP COLUMN RECNUM;
INSERT INTO #Service exec dbo.app_NewServicesOldFSD

;WITH cteOldFSDsToCreate AS (
    SELECT JobID.Item JobID, CONVERT(date,ServDate.Item,103) ServDate
    FROM dbo.SplitStringToTable(@OldServicesStr,',',2) JobID
    INNER JOIN dbo.SplitStringToTable(@OldServicesStr,',',2) ServDate ON JobID.Rw = ServDate.Rw AND JobID.Cl = 0 AND ServDate.Cl = 1
)

INSERT INTO SERVICE SELECT S.*
FROM #Service S
INNER JOIN cteOldFSDsToCreate N ON N.JobID = S.JOB_ID AND N.ServDate = S.DATE

DROP TABLE #Service

一个可用且可能的@OldServicesStr 可能是 '11428,23/07/2019,11429,23/07/2019,15186,5/10/2019'

为了在 SSMS 中测试它,我打开了一个新查询并输入
exec app_CreateNewServicesOldFSD '11428,23/07/2019,11429,23/07/2019,15186,5/10/2019'

并得到以下错误:

警告:空值被聚合或其他 SET 操作消除。 消息 208,级别 16,状态 0,过程 app_CreateNewServicesOldFSD,第 65 行 [批处理开始第 7 行] 对象名称“#Service”无效。
完成时间:2020-11-20T20:36:57.1356921+11:00

我知道这不是你的情况,但为了不要忘记,使用 Biztalk WCF-Custom 适配器与 SQL 绑定和临时表也存在限制。

根据本网站: http : //thoughtsofmarcus.blogspot.com/2010/11/calling-stored-procedures-from-biztalk.html

您需要在创建临时表并插入它们之前 SET FMTONLY OFF 并在从它们中选择之前 SET FMTONLY ON ,如下面的示例所示。

ALTER PROCEDURE [dbo].[FetchTestData]
(@a4 varchar(4))
AS
DECLARE @FmtOnlyIsSet bit = 0
IF (1=0) BEGIN SET @FmtOnlyIsSet = 1 END
IF @FmtOnlyIsSet = 1
   SET FMTONLY OFF

SELECT t1, t2, t3 INTO #temp01 FROM Table_1

IF @FmtOnlyIsSet IS NULL
   SET FMTONLY ON

SELECT t1, t2, t3 FROM #temp01

RETURN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM