powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Query Analyzer!!!
15 сообщений из 15, страница 1 из 1
Query Analyzer!!!
    #32031413
Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как настроить QA чтобы он при компиляции хранимых процедур не проверял наличие таблиц, столюцов и т.п.?
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031447
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по конкрентнее про "не проверял наличие таблиц, столюцов и т.п.".
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031472
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы - а QA ничего вообще то и не компилит. Потому ничего и не проверяет. Это забота SQLServer, а не Tools
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031483
Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ASCRUS - Это понятно просто лень писать про это было...

2Glory - смысл в том что при компиляции процедуры содержащей строчку
select column1, column2 ... into table1 from table2
сервер проверяет наличие таблицы table2, а затем наличие в ней указанных столбцов.

У меня трабл с этим - дело в том что table2 постоянно меняется/удаляется/создается при чем не мной... вот и хотелось от этого отвязаться
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031489
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Механизм “Deferred Name Resolution” подразумевает проверку наличия всех запрашиваемых столбцов в таблице, если заправшиваемая таблица существует. Обойти это невозможно (если только не строить динамические запросы).

Удачи
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031501
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите сказать что скрипт вида

alter procedure myproc
...
AS
...
select column1, column2 ... into table1 from table2
...
go


в QA вызывает ошибку при отсутствии таблицы table2 ?
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031526
Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня да...
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031529
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Денис
переходите с 6.5 на 7 или 2000 - там это не проверяется, к сожалению

2 Glory
на 6.5 этот скрипт вызовет ошибку
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031541
Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я на 2000... и у меня это проверяется...
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031550
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Денис

А compatibility level у вас для этой базы какой ?


2SergSuper
Да, я наверное многое потерял, не "пообщавшись" с SQL 6.5
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031552
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сложилось впечатление, что если обьект существует, то обращение к его полям/параметрам проверяется, если не существует, то все просто компилится без разговоров
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031554
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу ошибаться, но по моему, SQL Server при компиляции процедуры сохраняет оптимизированный план выполненения её запросов, поэтому и требует наличия таблиц. К примеру, если я не ошибаюсь, при добавлении индекса к таблице которая участвует в запросе, необходимо пересобрать процедуру, что бы новый индекс стал использоваться. Соответственно, как мне кажется, наличие таблицы необходимо. Если действительно очень хочется написать процедуру обращающуюся к несуществующим таблицам, то делать это можно динамическим запросом, как правильно сказал jimmers. А вообще, прошу прощения, мне кажется, что решение вашей проблемы из области организации. Во всяком случае, у меня на работе, если кто взялся за изменение таблиц, то сам следит за процедурами связанными с этой таблицей.
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031556
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, но по-моему мои слова не так поняли: существует т.н. механизм отложенного разрешения
имен. Суть его в том, что если объект (в данном случае таблица) существует, то все опрашиваемые в этой
таблице поля должны существовать также. Если таблица не существует, то, естественно, поля можно указать
любые... Если же необходимо указать в запросе несуществующие столбцы для существующей таблицы, то здесь
можно применить Dynamic SQL. Однако этот способ, на мой взляд, порочен по сути.

Удачи
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031559
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, так и думал, что ошибаюсь План то составляется при первом, после старта SQL Server'a, запуске... На 2000 я получил предупреждение о несуществующей таблице, при compatibility level 65, а при compatibility level 70-80 процедура создалась без предупреждения... Так что извините за ошибку...
...
Рейтинг: 0 / 0
Query Analyzer!!!
    #32031564
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сказанному jimmers могу лишь добавить, что ошибки обращения к полям таблицы, несуществующим на момент создания/изменения процедуры можно избежать, если вместо таблицы обращатся к представлению. Тогда при изменении структуры таблицы, пока не произведено обновление представления, процедуры можно будет создавать, ссылаясь на "старые" поля

\nuse pubs
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[my_table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[my_table]
GO

create table [dbo].[my_table] (f1 int, f2 int)
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[my_view]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[my_view]
GO


create view [dbo].[my_view]
as
select f1, f2 from my_table
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[my_proc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[my_proc]
GO

create procedure [dbo].[my_proc]
as
select f1, f2 from my_view
go

alter table my_table drop column f2
go

alter procedure [dbo].[my_proc]
as
select f1, f2 from my_view
go


Только вот не вижу необходимости так делать.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Query Analyzer!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]