Задать вопрос
@TroubleInThat
Разработка прикладного ПО

Почему в процедуре неверно динамически создается временная таблица?

В хранимой процедуре динамически создаются колонки во временной таблице. При первом запуске создается колонка с именем "Column1", при следующем "Column2" , т.е. имя колонки - вычисляемое.
EXEC _test1 'column1'
EXEC _test1 'column2'
EXEC _test1 'column3'

Но фактически, при втором и третьем обращении в таблице отображается колонка 'column1' - даже если открываю новое окно SSMS или же запускаю новый экземпляр SSMS .
dbo._test1
CREATE procedure dbo._test1(
	@name varchar( 32)
)
AS 
BEGIN
	Select SPID = @@SPID

	if object_id('tempdb..#TST') is not null				Select  'temp table #TST exists on start'

	Create table #TST(	dummy varchar(32) NULL	)

	Select *  from #tst

Declare @SQLString varchar(255)
	SET @SQLString = 'ALTER  TABLE #TST add [' + @name +  '] varchar(255) null '
	EXEC ( @SQLString )

	Select *  from #tst

	drop table #TST

	if object_id('tempdb..#TST') is not null			Select  'temp table #TST exists on STOP'
END

Совершенно неясно, откуда при "втором" вызове в временной таблице появляется старое имя колонки? На более старых 2000 - 2014 версиях SQL такая проблема не возникала. Проблема проявляется на Microsoft SQL Server 2019.
  • Вопрос задан
  • 71 просмотр
Подписаться 1 Средний 3 комментария
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
SELECT @@VERSION
GO
EXEC _test1 'column1'
GO
EXEC _test1 'column2'
GO
EXEC _test1 'column3'
GO

Результат
Microsoft SQL Server 2019 (RTM-CU14) (KB5007182) - 15.0.4188.2 (X64) 

(затронута одна строка)

SPID
------
60

(затронута одна строка)

dummy
--------------------------------

(затронуто строк: 0)

dummy                            column1
-------------------------------- ---------

(затронуто строк: 0)

SPID
------
60

(затронута одна строка)

dummy
--------------------------------

(затронуто строк: 0)

dummy                            column2
-------------------------------- ---------

(затронуто строк: 0)

SPID
------
60

(затронута одна строка)

dummy
--------------------------------

(затронуто строк: 0)

dummy                            column3
-------------------------------- ---------

(затронуто строк: 0)


Время выполнения: 2022-01-18T13:20:25.1207006+03:00
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@TroubleInThat Автор вопроса
Разработка прикладного ПО
Проблема решена.
Установлено накопительное обновление CU14

Версия SQL обновилась до
Microsoft SQL Server 2019 (RTM-CU14) (KB5007182) - 15.0.4188.2 (X64) Nov 3 2021 19:19:51 Copyright (C) 2019 Microsoft Corporation Standard Edition (64-bit) on Windows 10 Enterprise 10.0 (Build 19042: )

Спасибо за подсказку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы