Вот скрипт, который, я думаю, воспроизводит проблему, идентичную вашей:
CREATE PROCEDURE TestTmpTable
@value varchar(20)
AS
BEGIN
CREATE TABLE #test (id int IDENTITY, value varchar(20));
INSERT INTO #test (value) VALUES (@value)
SELECT * FROM #test;
DROP TABLE #test;
END
GO
CREATE TABLE #test (id int IDENTITY, value2 varchar(20));
EXEC TestTmpTable 'some text';
SELECT * FROM #test;
DROP TABLE #test;
GO
DROP PROCEDURE TestTmpTable
Как видите, здесь есть две таблицы #test
, одна создается в хранимой процедуре, другая -в пакете, который вызывает хранимую процедуру.Они имеют разные структуры: один имеет столбец с именем value
, другой - с именем value2
.Если вы запустите скрипт, вы увидите эту ошибку:
Msg 207, Level 16, State 1, Procedure TestTmpTable, Line 6
Invalid column name 'value'.
В данный момент я не могу указать вам на соответствующую документацию, но для меня очевидно, что некоторая предварительная проверка именипроисходит непосредственно перед казнью ИП.На этом этапе обнаруживается несоответствие между именами столбцов, на которые есть ссылки в хранимой процедуре, и именами, которые фактически присутствуют в уже существующей таблице , что делает выполнение невозможным.
Если вы измените value2
to value
, скрипт будет работать без проблем, и в выходных данных будет два набора строк, один со значением 'some text'
, другой пустой.И, конечно, скрипт будет работать, если вы удалите все части, относящиеся к внешней таблице #test
.
Итак, проверьте места, где вызывается ваша процедура, чтобы увидеть, может ли существовать какая-либо другая таблица #users
в этот момент, и если да, исправьте проблему в соответствии с вашей ситуацией.