Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Здравствуйте.

Возможно ли на SQL Server создать механизм, чтобы при обращении к определенной таблице заданного приложения работа бы происходила не с этой таблицей, а с представлением из той же базы данных? Т.е. например, если приложение отправляет запрос вида "Select * from Table_A...", то в ответ бы ему возвращалась выборка из запроса вида "Select * from View_B...". Если возможно, то какими средствами?
16 янв 15, 16:18    [17128918]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
bdv1983
Если возможно, то какими средствами?

ну так перименовываете таблицу, а вместо нее создаете представление
16 янв 15, 16:19    [17128927]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Glory, все гениальное просто. Завтра попробую.
18 янв 15, 11:41    [17133670]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Переименование не подходит. Программа-клиент при запуске создает новую версию Table_A. Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.
19 янв 15, 10:20    [17135950]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
bdv1983
Программа-клиент при запуске создает новую версию Table_A
Это фильм ужасов какой-то!
19 янв 15, 10:27    [17135995]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
bdv1983
Переименование не подходит. Программа-клиент при запуске создает новую версию Table_A. Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.
А вы сделайте триггер на создание таблиц, и при создании Table_A меняйте её на вьюху :-)
19 янв 15, 10:31    [17136027]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
bdv1983
Переименование не подходит. Программа-клиент при запуске создает новую версию Table_A. Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.
А вы сделайте триггер на создание таблиц, и при создании Table_A меняйте её на вьюху :-)
Так это bdv1983 так думает, что "Программа-клиент создаёт".
Зачем её пересоздавать-то? TRUNCATE+INSERT не проще ли?
19 янв 15, 10:44    [17136099]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
_djХомяГ
Guest
1 Собственно клиентская программа - это черный ящик или есть исходники в которых можно менять код ?
2 Если черный ящик и есть возможность (права) на использование профайлера, то лучше с помощью него убедиться что на самом деле происходит с таблицей
19 янв 15, 10:56    [17136202]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
iap
alexeyvg
пропущено...
А вы сделайте триггер на создание таблиц, и при создании Table_A меняйте её на вьюху :-)
Так это bdv1983 так думает, что "Программа-клиент создаёт".
Зачем её пересоздавать-то? TRUNCATE+INSERT не проще ли?
Ну, может там требуется, что бы приложению возвращался другой набор полей, или нужно поменять типы данных...
19 янв 15, 10:57    [17136206]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
iap
пропущено...
Так это bdv1983 так думает, что "Программа-клиент создаёт".
Зачем её пересоздавать-то? TRUNCATE+INSERT не проще ли?
Ну, может там требуется, что бы приложению возвращался другой набор полей, или нужно поменять типы данных...
А если 100 пользователей одновременно запустят этого клиента, то что будет?
Про права на создание/удаление таблицы я уж молчу...
19 янв 15, 13:38    [17137283]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
_djХомяГ,
программа с закрытым исходным кодом. Профайлером посмотрю.
19 янв 15, 14:19    [17137619]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
bdv1983
Переименование не подходит. Программа-клиент при запуске создает новую версию Table_A. Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.


В прилагалище подмените имя таблицы в скрипте, который творит такую фигню.
19 янв 15, 14:28    [17137681]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Winnipuh
bdv1983
Переименование не подходит. Программа-клиент при запуске создает новую версию Table_A. Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.

В прилагалище подмените имя таблицы в скрипте, который творит такую фигню.

Если это скрипт. А запросто можеть быть и ORM в режиме code first.
19 янв 15, 14:56    [17137921]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Из профайлера, при запуске программы:
IF OBJECT_ID(N'Table_A',N'U') is NULL
	BEGIN
	CREATE TABLE Table_A(
		[ID] [int] IDENTITY(1,1) NOT NULL,
                ...
	) ON [PRIMARY]
	END

Вряд ли удастся этот скрипт изменить, а значит и таблицу переименовывать бессмысленно.
19 янв 15, 15:33    [17138289]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
bdv1983
Из профайлера, при запуске программы:
IF OBJECT_ID(N'Table_A',N'U') is NULL
	BEGIN
	CREATE TABLE Table_A(
		[ID] [int] IDENTITY(1,1) NOT NULL,
                ...
	) ON [PRIMARY]
	END

Вряд ли удастся этот скрипт изменить, а значит и таблицу переименовывать бессмысленно.


А клиентское приложение в каком виде у вас? эхэ или веб?
19 янв 15, 15:51    [17138462]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
_djХомяГ
Guest
bdv1983
Из профайлера, при запуске программы:
IF OBJECT_ID(N'Table_A',N'U') is NULL
	BEGIN
	CREATE TABLE Table_A(
		[ID] [int] IDENTITY(1,1) NOT NULL,
                ...
	) ON [PRIMARY]
	END

Вряд ли удастся этот скрипт изменить, а значит и таблицу переименовывать бессмысленно.

Код интерпритируется следующим образом: если Table_A отсутствует в базе, то приложение ее создаст Но не приведен код дропанья данной таблицы
Т е это не совсем то , что было написано выше
автор
Программа-клиент при запуске создает новую версию Table_A
19 янв 15, 16:23    [17138790]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
_djХомяГ
bdv1983
Из профайлера, при запуске программы:
IF OBJECT_ID(N'Table_A',N'U') is NULL
	BEGIN
	CREATE TABLE Table_A(
		[ID] [int] IDENTITY(1,1) NOT NULL,
                ...
	) ON [PRIMARY]
	END


Вряд ли удастся этот скрипт изменить, а значит и таблицу переименовывать бессмысленно.

Код интерпритируется следующим образом: если Table_A отсутствует в базе, то приложение ее создаст Но не приведен код дропанья данной таблицы
Т е это не совсем то , что было написано выше
автор
Программа-клиент при запуске создает новую версию Table_A
Если её переименовать, то в другом экземпляре клиента будет попытка её снова создать.
Весело!
19 янв 15, 16:27    [17138845]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
_djХомяГ
bdv1983
Из профайлера, при запуске программы:
IF OBJECT_ID(N'Table_A',N'U') is NULL
	BEGIN
	CREATE TABLE Table_A(
		[ID] [int] IDENTITY(1,1) NOT NULL,
                ...
	) ON [PRIMARY]
	END

Вряд ли удастся этот скрипт изменить, а значит и таблицу переименовывать бессмысленно.

Код интерпритируется следующим образом: если Table_A отсутствует в базе, то приложение ее создаст Но не приведен код дропанья данной таблицы
Т е это не совсем то , что было написано выше
автор
Программа-клиент при запуске создает новую версию Table_A


в общем то же - создает, если не существует.
Но это вряд ли поможет ТС, нужно подредактировать клиентский код
19 янв 15, 16:30    [17138878]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
_djХомяГ
Guest
автор
Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.

Что за внештатная ситуация ?
Может происходят какие то действия с вьюшкой Table_A на попытку добавления ,изменения данных вьюхи? В принципе это можно обойти instead of триггерами
Вообщем много непонятного
19 янв 15, 16:35    [17138938]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
_djХомяГ
автор
Если в БД существует представление с именем Table_A, то возникает нештатная ситуация и программа перестает работать правильно.

Что за внештатная ситуация ?
Может происходят какие то действия с вьюшкой Table_A на попытку добавления ,изменения данных вьюхи? В принципе это можно обойти instead of триггерами
Вообщем много непонятного
Всё понятно.
Переименовываем таблицу.
Создаём VIEW Table_A, выбирающее данные из переименованной таблицы.
При следующем запуске окажется, что таблицы нет, будет попытка её создать,
но с таким именем уже есть объект с таким именем - это VIEW.
"Объект с таким именем уже существует!"

Другой сценарий. После создания VIEW этот же клиент запускается ещё раз другим пользователем. Результат: "Объект с таким именем уже существует!"

19 янв 15, 16:50    [17139112]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Клиент - настольное приложение, exe-файл.
Кода на удаление таблицы нет, я ее переименовываю, а не удаляю.
Нештатная ситуация в том, что клиент перестает отображать/добавлять/удалять данные таблицы Table_A.
Можно конечно попробовать триггер на создание таблицы Table_A, чтобы клиент при запуске не создавал ее заново.
20 янв 15, 09:00    [17141056]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
bdv1983
Клиент - настольное приложение, exe-файл.
Кода на удаление таблицы нет, я ее переименовываю, а не удаляю.
Нештатная ситуация в том, что клиент перестает отображать/добавлять/удалять данные таблицы Table_A.
Можно конечно попробовать триггер на создание таблицы Table_A, чтобы клиент при запуске не создавал ее заново.
Клиент то в одном экземпляре запускается, или во многих?

Если во многих, то с показанным вами кодом клиента задача вообще не решается.

Если в одном, то нужно при создании таблицы в триггере удалять её, и создавать вьюху. А потом, при завершении работы приложения (или каких то действий по работе с данными из него) удалять эту вьюху, что бы при следующим запуске приложения не было ошибки.

А в целом - плохая затея. Просто не пользуйтесь говноприложениями, с утерянным кодом, без поддержки, ворованными и т.д. Больше ресурсов съэкономите, используя что то другое, или налабав что то в экселе, аксессе и т.п.
20 янв 15, 09:19    [17141127]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
alexeyvg, клиент запускается во многих экземплярах.
alexeyvg
задача вообще не решается

Клиент представляет из себя приложение от одного из ведущих мировых производителей САПР. Задача возникла вследствие необходимости интеграции рассматриваемого клиента с САПР этого же производителя. Существует решение от фирмы-производителя. Платное. Поэтому хотелось бы создать собственное, бесплатное. "Краем глаза" их решение я видел, там используются представления для связи с БД САПР.
20 янв 15, 11:29    [17141841]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
bdv1983
Клиент - настольное приложение, exe-файл.
Кода на удаление таблицы нет, я ее переименовываю, а не удаляю.
Нештатная ситуация в том, что клиент перестает отображать/добавлять/удалять данные таблицы Table_A.
Можно конечно попробовать триггер на создание таблицы Table_A, чтобы клиент при запуске не создавал ее заново.


1. это 1.
2. исправить в клиентском эхэ имя создаваемой таблицы, тогда она будет создана один раз и не будет ошибок
20 янв 15, 11:49    [17142029]     Ответить | Цитировать Сообщить модератору
 Re: Подмена результата выборки из таблицы  [new]
bdv1983
Member

Откуда: Старая Русса
Сообщений: 28
Winnipuh
2. исправить в клиентском эхэ имя создаваемой таблицы, тогда она будет создана один раз и не будет ошибок

К коду клиента доступа нет.
20 янв 15, 12:15    [17142194]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить