SQL Server сочетает в себе CREATE / ALTER и EXEC
Когда вы получите сообщение об ошибке, и вы получите сообщение в SSMS с указанием строки кода, вам нужно будет найти содержимое этой строки.
Но я наткнулся на ошибку. Если вы запустите следующий код на SQL Server, вы получите вызов рекурсивной функции. Похоже, что ALTER принимает EXEC как часть хранимой процедуры, даже если это после строки AS BEGIN … END.
ALTER PROCEDURE SP_GetErrorLine( @lineNum INT, @spName NVARCHAR(250) ) AS BEGIN SET NOCOUNT ON CREATE TABLE #spLine ( line INT NOT NULL IDENTITY(1,1), Bob NVARCHAR(2048) NOT NULL ) INSERT INTO #spLine (Bob) EXEC sp_helptext @spName DECLARE @line NVARCHAR(2048) SELECT @line=Bob FROM #spLine WHERE [email protected] DROP TABLE #spLine; SELECT @lineNum AS [Line No.], LTRIM(RTRIM(@line)) AS [SP Line] END EXEC SP_GetErrorLine 67, 'SP_AnotherProcedure'
(Вам нужно запустить его с заменой SP_AnotherProcedure на любую другую хранимую процедуру, имеющуюся в той же БД).
- SQL Server 2016 выберите, где в json-массиве
- SSIS: запрос динамического поиска
- Как преобразовать функцию AVG () в десятичный в SQL SERVER
- R в SQL Server: выходной кадр данных в таблицу
- SQL Server: группировка по столбцу с другим столбцом
Является ли это ожидаемым поведением или неправильным анализом кода?
ура
- Понимание определенного типа тупика
- OPENQUERY выбрасывает ошибку «Недостаточно памяти»: ограничивайте строки до тех пор, пока все не будут загружены
- «Sqlservr.exe перестала работать» ошибка продолжает отображаться
- Как создать именованный экземпляр sql-сервера на ubuntu
- Как сохранить результат динамического SQL в переменной?
- Группировка строк, если их даты совпадают, и ранжирование их
- должен всегда перезапускать сервер sql при подключении к другому клиенту
- Как улучшить сортировку скорости по дате времени из другой таблицы?
BEGIN / END не является терминатором партии. То, что вы испытываете, – это именно то, как оно должно себя вести. Если вы хотите иметь несколько сценариев, вам нужно поставить разделитель партии между партиями. Серийный разделитель по умолчанию – GO.
При этом вы можете иметь любое количество блоков BEGIN / END в одной партии. Настоящий трюк не путает партию с блоком.