【发布时间】:2015-10-29 04:09:34
【问题描述】:
情况如下:
过程 1 创建一个临时表 (#MYTABLE) 并调用过程 2。过程 2 还尝试创建具有不同列的 #MYTABLE。当过程 2 尝试将数据插入 #MYTABLE 时,会发生错误,提示“列名无效”。我对此有两个问题:
1) 在过程 2 中创建 #MYTABLE 时系统不应该抱怨吗?我明白为什么它在编译时不能反对,但在运行时我会期待一个错误。
2) 鉴于它不会抱怨创建,实际上当您在过程 2 中从 #MYTABLE 中选择时,您会看到新列,为什么它会抱怨 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
-- 'BARACK'
-- ,'OBAMA';
SELECT
'INSIDE PROC 2 AFTERWARDS' AS TABLENAME
,*
FROM
dbo.#MYTABLE;
--INSERT INTO dbo.#MYTABLE
-- ( Name, LastName )
-- SELECT
-- 'BARACK'
-- ,'OBAMA';
SELECT
'DO NOTHING 2' AS TABLENAME;
GO
EXEC MYPROC1;
【问题讨论】:
标签: sql-server stored-procedures