情况如下:
过程1创建临时表(#MYTABLE)并调用过程2.过程2还尝试创建具有不同列的#MYTABLE.当过程2尝试将数据插入#MYTABLE时,会发生错误,抱怨"列名无效".我有两个问题:
1)在程序2中创建#MYTABLE时,系统是否应该抱怨?我理解为什么它不能在编译时反对,但在运行时我会发现错误.
2)鉴于它没有抱怨创建,事实上当您从过程2中的#MYTABLE中进行SELECT时,您会看到新列,为什么它会抱怨INSERT?
下面是代码.取消注释INSERT语句将得到错误.
(我知道很多方法可以解决这个问题,因此我不需要对此做出回应.我只是想了解发生了什么.)
IF OBJECT_ID(N'dbo.MYPROC1', N'P') IS NOT NULL
DROP PROCEDURE dbo.MYPROC1;
GO
CREATE PROCEDURE dbo.MYPROC1
AS
CREATE TABLE dbo.#MYTABLE ( Name VARCHAR(256) );
SELECT
'DO NOTHING 1' AS TABLENAME;
EXEC dbo.MYPROC2;
GO
IF OBJECT_ID(N'dbo.MYPROC2', N'P') IS NOT NULL
DROP PROCEDURE dbo.MYPROC2;
GO
CREATE PROCEDURE dbo.MYPROC2
AS
SELECT
'INSIDE PROC 2 BEFOREHAND' AS TABLENAME
,*
FROM
dbo.#MYTABLE;
CREATE TABLE dbo.#MYTABLE
(
Name VARCHAR(256)
,LastName VARCHAR(256)
);
--INSERT INTO dbo.#MYTABLE
-- ( Name, LastName )
-- SELECT
-- …Run Code Online (Sandbox Code Playgroud)