Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выполнить подстановку? 
:(
    Опции темы
Nickname
Дата 20.12.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Здравствуйте. Мне нужно для MS SQL замутить такую подстановку:
Код

DECLARE @cat NVarChar(255)
SET @cat='AND resumeid=1'
SELECT resumeid, categoryid FROM resumes WHERE 1=1 @cat 

Т.е. вместо @cat должна произойти подстановка, что в результате должно дать, такой запрос
Код

SELECT resumeid, categoryid FROM resumes WHERE 1=1 AND resumeid=1 

но у меня query analizer ругается:
Цитата

Server: Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near '@cat'.


Это сообщение отредактировал(а) Nickname - 20.12.2007, 16:56
PM MAIL   Вверх
mr.DUDA
Дата 20.12.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



А если так:
Код
DECLARE @cat NVarChar(255)
SET @cat='AND resumeid=1'

EXEC 'SELECT resumeid, categoryid FROM resumes WHERE 1=1 ' + @cat
GO


(ногами не пинать, давно с SQL Server-ом не работал)


--------------------
user posted image
PM MAIL WWW   Вверх
Nickname
Дата 20.12.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата

DECLARE @cat NVarChar(255)
SET @cat='AND resumeid=1'
EXEC 'SELECT resumeid, categoryid FROM resumes WHERE 1=1 ' + @cat
GO

выдает
Цитата

Server: Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near 'SELECT resumeid, categoryid FROM resumes WHERE 1=1 '.

Аа понятно - скобки нужно поставить...
EXEC ('SELECT resumeid, categoryid FROM resumes WHERE 1=1 ' + @cat)

А можно ли такую конструкцию подставить в хранимую процедуру?

Это сообщение отредактировал(а) Nickname - 20.12.2007, 17:47
PM MAIL   Вверх
mr.DUDA
Дата 20.12.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(Nickname @  20.12.2007,  17:44 Найти цитируемый пост)
А можно ли такую конструкцию подставить в хранимую процедуру?

Дык это, разве тут не SQL хранимой процедуры приведён? С параметрами. Можно, ИМХО.


--------------------
user posted image
PM MAIL WWW   Вверх
HAL707
Дата 20.12.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.9.2007

Репутация: нет
Всего: 4



Можно подставить что угодно и куда угодно, вопрос в том будет ли работать smile 
В хранимку это конечно подставить можно, однако придется пожертвовать небольшим количеством времени на компиляцию кода при вызове ХП. 
Но так как ты написал (передавать в качестве параметра часть строки запроса), не делают обычно...
PM MAIL   Вверх
1stain
Дата 20.12.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



а так? (скобки добавить)
Код

DECLARE @cat NVarChar(255)
SET @cat='AND resumeid=1'

EXEC ('SELECT resumeid, categoryid FROM resumes WHERE 1=1 ' + @cat);
GO


Цитата(HAL707 @  20.12.2007,  17:54 Найти цитируемый пост)
Но так как ты написал (передавать в качестве параметра часть строки запроса), не делают обычно...

вполне нормальная конструкция, как на мой взгляд. Например, нам надо периодически выполнить некоторые процедуры в определенном порядке, имена которых содержаться в некоторой таблице. Открываем курсор для выборки имен нужных процедур и вперед... Таким образом легко можно добавлять новую функциональность в бизнес-логику

Это сообщение отредактировал(а) 1stain - 20.12.2007, 19:22


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.