Способы проверки запросов T-SQL?
У меня есть доступ к базе данных Access, и в этой базе данных находятся поля, заполненные запросами TSQL. Эти запросы обрабатываются T-SQL на сервере. Поэтому, когда я пишу эти SQL-запросы и помещаю их в поле для использования конечным сервером, я не могу проверить синтаксис/etc. Я мог бы создать временный запрос в этой базе данных Access, но это не тот же самый язык запросов. Например, Access будет правильно использовать IIF , но TSQL не будет (вместо этого будет CASE).
У меня нет прямой доступ к этому серверу с TSQL, есть ли способ проверить мои запросы T-SQL (для синтаксиса и тому подобного)? Может быть, веб-инструмент онлайн?
Я должен отметить, что у меня нет доступа к SQL-серверу. Только БД доступа и только это. Я понимаю, что он не будет проверять имена таблиц и тому подобное, я бы не ожидал этого.
6 ответов:
На самом деле, сочетание ответа MattMc3 и ответ FremenFreedom должны работать.
Загрузите SQL Express.
Затем объявите следующую хранимую процедуру:
create procedure IsValidSQL (@sql varchar(max)) as begin begin try set @sql = 'set parseonly on;'+@sql; exec(@sql); end try begin catch return(1); end catch; return(0); end; -- IsValidSQLВы можете проверить это с помощью:
declare @retval int; exec @retval = IsValidSQL 'select iif(val, 0, 1) from t'; select @retvalИли с:
declare @retval int; exec @retval = IsValidSQL 'select val from t'; select @retvalПримечание: это будет ловить проблему IIF (). Он не будетловить ничего, связанного со структурами таблиц или столбцов. Для этого вам понадобится схема и немного другой подход ("select top 0 * from () t") я бы так и сделал.
Возможно, вы сможете что-то сделать с SQL Fiddle онлайн. Однако я бы предложил иметь локальную копию базы данных.
Вы можете проанализировать ваш T-SQL, чтобы проверить допустимый синтаксис, выполнив его на машине SQL Server с
SET PARSEONLY ONв качестве первой строки вашего скрипта. Он не будет проверять имена таблиц или полей, но предоставит вам любые синтаксические ошибки.
Data Dude (Gert Drapers) описывает, как использовать встроенный синтаксический анализатор SQL Server T-SQL в вашем приложении здесь:
Если вы хотите только проверить правильность инструкций SQL, которые у вас есть - это может быть хорошим способом, и он не требует установки SQL Server как такового, где вы запускаете модульные тесты.
Это подход, основанный на .NET, и он не может - конечно - проверить имена объектов в базе данных, если вы не используете живую базу данных - но она может ловить синтаксические ошибки в ваших операторах T-SQL.
Может ли SQL Server Management Studio Express (скачать бесплатно) подключаться к обычным экземплярам SQL Server? Если да, то, возможно, вы могли бы проверить запросы там. Даже если вам не удалось подключиться к реальному серверу, вы можете создать тестовую версию своей базы данных в Express, которая, по крайней мере, позволит вам поймать синтаксические проблемы и проблемы с именами.
Если они достаточно статичны, преобразуйте их в хранимые процедуры в базе данных Sql, а затем просто вызовите их из access.
Вы можете использовать
NOEXECВариант :SET NOEXEC ON SELECT 1 AS Test SET NOEXEC OFF
Comments