#sql #sql-server #tsql
#sql #sql-сервер #tsql #синтаксис
Вопрос:
У меня есть доступ к базе данных Access, и в этой базе данных есть поля, заполненные запросами TSQL. Эти запросы обрабатываются T-SQL на сервере. Поэтому, когда я пишу эти SQL-запросы и помещаю их в поле для использования конечным сервером, я не могу проверить синтаксис / etc . Я мог бы создать временный запрос в этой базе данных Access, но это не тот же язык запросов. Например, Access будет правильно использовать IIF
, но TSQL не будет (вместо этого будет CASE
).
У меня нет прямого доступа к этому серверу с помощью TSQL, есть ли способ проверить мои запросы T-SQL (для синтаксиса и тому подобного)? Возможно, веб-инструмент онлайн?
Я должен отметить, что у меня нет доступа к SQL server. Только Access db и только. Я понимаю, что он не будет проверять имена таблиц и тому подобное, я бы этого не ожидал.
Комментарии:
1. Это было бы сложно, особенно если вы проверяете свои запросы, относящиеся к объектам на сервере SQL.
Ответ №1:
На самом деле, комбинация ответа 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») woudl сделать это.
Возможно, вы сможете что-то сделать с SQL Fiddle онлайн. Тем не менее, я бы предложил иметь локальную копию базы данных.
Ответ №2:
Вы можете проанализировать свой T-SQL для проверки правильности синтаксиса, выполнив его на компьютере SQL Server с a SET PARSEONLY ON
в качестве первой строки вашего скрипта. Он не будет проверять имена таблиц или полей, но предоставит вам любые синтаксические ошибки.
Комментарии:
1. Это правильно, хотя ограничение невозможности подключения к базе данных SQL Server не было конкретно указано в вопросе. Из-за отсутствия проверки таблиц / столбцов ничто не мешает подключению к установке SQL Express. Не обязательно должна быть рабочей базой данных.
2. У меня нет доступа к компьютеру SQL Server. Access — единственное приложение, к которому я могу прикоснуться (через Citrix).
Ответ №3:
Специалист по обработке данных (Герт Дрейперс) описывает, как использовать встроенный анализатор SQL Server T-SQL в вашем приложении здесь:
Если вы хотите проверять только правильность имеющихся у вас инструкций SQL, это может быть хорошим решением, и для этого не требуется устанавливать SQL Server как таковой там, где вы запускаете свои модульные тесты.
Это подход, основанный на .NET, и он, конечно, не может проверять имена объектов в вашей базе данных, если вы не используете действующую базу данных, но он может обнаруживать синтаксические ошибки в ваших операторах T-SQL.
Ответ №4:
Вы можете использовать NOEXEC
опцию:
SET NOEXEC ON
SELECT 1 AS Test
SET NOEXEC OFF
Комментарии:
1. Для моих нужд
SET NOEXEC ON
намного превосходитSET PARSEONLY ON
, поскольку этот параметр также проверяет запрос на соответствие схеме.
Ответ №5:
Может ли SQL Server Management Studio Express (скачать бесплатно) подключаться к обычным экземплярам SQL Server? Если да, возможно, вы могли бы протестировать запросы там. Даже если вам не удалось подключиться к реальному серверу, вы можете создать тестовую версию своей базы данных в Express, которая, по крайней мере, позволит вам выявить проблемы с синтаксисом и именами.
Ответ №6:
Если они достаточно статичны, преобразуйте их в хранимые процедуры в базе данных Sql, а затем просто вызывайте их из access.