Я обнаружил ошибку, компилирующую ошибку в MS SQL.Ошибка динамической таблицы SQL Template
Так скажем, у нас есть хранимая процедура, как этот
CREATE PROCEDURE Test
@FirstPart bit
AS
BEGIN
if @FirstPart = 1 begin
Declare @SQL varchar(max)
set @SQL = 'ALTER TABLE #Test ADD Column2 varchar(100)'
exec(@SQL)
set @SQL = 'ALTER TABLE #Test ADD Column3 varchar(100)'
exec(@SQL)
end else
SELECT Column1, Column2,Column3 FROM #Test
END
Тогда в другой Sesion мы делаем это
CREATE TABLE #Test (Column1 varchar(100))
exec Test 1
Обычно это будет выполнять альтер заявления таблицы 2 без проблем, но это запрос выполняется с ошибками
Msg 207, Level 16, State 1, Procedure Test, Line 15
Invalid column name 'Column2'.
Msg 207, Level 16, State 1, Procedure Test, Line 15
Invalid column name 'Column3'.
Любые идеи?
EDIT:
ALTER PROCEDURE Test
AS
BEGIN
--if @FirstPart = 1 begin
Declare @SQL varchar(max)
set @SQL = 'ALTER TABLE #Test ADD Column2 varchar(100)'
exec(@SQL)
set @SQL = 'ALTER TABLE #Test ADD Column3 varchar(100)'
exec(@SQL)
--end else
SELECT Column1, Column2,Column3 FROM #Test
END
когда '@FirstPart <> 1' вы получите эту ошибку и я не вижу необходимости динамического запроса здесь –
я замечаю, если вы закомментировать«еще»часть прок, вы не» t получить ошибку при выполнении. Это подсказывает мне, что при вызове proc обе стороны if оцениваются для ошибок, а не только для того, что будет выполнено. SQL, как я полагаю, работает так. –
@NoDisplayName это всего лишь маленький пример, мой первоначальный запрос имеет неизвестное количество столбцов, поэтому мне нужен динамический sql. Также способ, которым я выполняю процедуру, равен значению 1, поэтому он не может пойти в случай <> 1 – CiucaS