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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание хранимой процедуры Incorrect syntax 
:(
    Опции темы
Beltar
Дата 14.2.2013, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

create procedure InsertData
 @T varchar(50), @FV int, @D DateTime, @V real
as
begin
SET NOCOUNT ON 
SET IDENTITY_INSERT @T OFF 
Insert Into @T
    Values (@FV, @D,@V)
end


Не регистрируется. MS SQL 2008.
Incorrect syntax near '@T'. для строки SET IDENTITY_INSERT @T OFF .
Если эту строку закомментировать, хотя она необоходима для последующего инсерта, чтобы не было попыток в столбец перв. ключа вставлять, то ошибка меняется. Якобы переменная T не объявлена. Успел уже скурить справку от MS и кучу примеров, но ничего не выкурилось.  smile  Что я делаю не так?




--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Zloxa
Дата 14.2.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Взять имя таблицы из переменной - нельзя.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Beltar
Дата 14.2.2013, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как можно обойти, чтобы для каждой таблицы свою процедуру не писать? (Всего таблиц 10)
Если совсем никак, и надо 10 хранимок, то как правильно сделать вставку, чтобы не было попыток вставки в автоинкрементное поле?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akina
Дата 14.2.2013, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Зависит от того, что надо - отменить такую операцию или изъять значение для автоинкремента и провенсти операцию. В любом случае задача легко решается триггером.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Beltar
Дата 14.2.2013, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно переписать в виде хранимой процедуры запрос типа

Код

SET IDENTITY_INSERT ТаблицаХ OFF 
Insert Into ТаблицаХ
    Values (1, '2013.01.01 01:01:01', 10.5)


Где ТаблицаХ одна из таблиц вида
Int PK автоинкрементный
Int
DateTime
Real

Потому что, этот запрос вызывается примерно 300 000 раз, что негативно влияет на скорость и юзверь негодует.

Это сообщение отредактировал(а) Beltar - 14.2.2013, 20:53


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akina
Дата 14.2.2013, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Beltar @  14.2.2013,  21:38 Найти цитируемый пост)
запрос вызывается примерно 300 000 раз, что негативно влияет на скорость и юзверь негодует.

А откуда такая убеждённость, что процедура будеть работать быстрее?
Может, надо последовать совету, и описывать задачу, а не свои попытки её решить?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Beltar
Дата 19.2.2013, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Задачу я и так решил одним способом, если он не устраивает, стоит попробовать второй.

По идее хранимка, как откомпилированный код должна работать быстрее всех. Однако в этот раз не оправдалось. Я попробовал хранимку с фиксированным именем таблицы, скорость оказалась примерно такой же, как и при использовании компонента для запроса на клиенте с фиксированным текстом и параметрами. Если, конечно, у запроса prepared включить.

В общем так и оставлю, хотя вопрос передачи имени таблицы, как параметра, остался нерешенным.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akina
Дата 19.2.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Beltar @  19.2.2013,  20:15 Найти цитируемый пост)
хранимка, как откомпилированный код должна работать быстрее всех

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



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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