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

Откуда:
Сообщений: 214
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 и кучу примеров, но ничего не выкурилось. Что я делаю не так?
14 фев 13, 16:20    [13927271]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Beltar,

А что вы хотите вставить в строковую переменную?
14 фев 13, 16:23    [13927288]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beltar
Что я делаю не так?


SET IDENTITY_INSERT @T OFF, Insert Into @T - этим вы что хотели сказать ?
Добавь-ка мне сервер в varchar(50) значения ?
Или отмени-ка у varchar(50) IDENTITY ?
14 фев 13, 16:25    [13927302]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Beltar
Member

Откуда:
Сообщений: 214
Имя таблицы для вставки хочу.
14 фев 13, 20:26    [13928641]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
xenix
Guest
автор
Имя таблицы для вставки хочу.

Ну если очень надо, то, как мне кажется, стоит подумать в сторону "красного sql-ля"(динамический sql sp_executesql() и все такое)
14 фев 13, 20:32    [13928673]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
имя ее назови
Guest
Beltar,

динамический sql это называется
14 фев 13, 20:33    [13928675]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Beltar
Что я делаю не так?


Пытаетесь написать одну универсальную хп.

Beltar
Успел уже скурить справку


Так надо было внимательно читать, а не курить, где можно использовать переменные, а где нет.
14 фев 13, 20:36    [13928688]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
Beltar
Успел уже скурить справку от MS и кучу примеров, но ничего не выкурилось. Что я делаю не так?
MSSQL устроен так же, как Delphi - там тоже нельзя присвоить значение переменной, имя которой задано в другой переменной.
14 фев 13, 21:12    [13928816]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
попробуйте покурить Динамический запрос или "переменная @Tablename" :)
14 фев 13, 21:22    [13928843]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Beltar
Member

Откуда:
Сообщений: 214
Написать SQL-запрос в среде разработки клиентской софтины и просто выполнить его, дело плевое, я так и сделал по началу, но у меня он вызываться 300 000 раз, как нефиг делать, и это дело все отрабатывает минут 10. А это не есть хорошо, юзверь негодует. Генерация динамического запроса тут не очень поможет. Поэтому хочу сделать хранимку, как минимум от парсинга SQL 300 000 раз уйду. Проблема в том, что раньше хранимки я не писал.
14 фев 13, 21:52    [13928962]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Beltar,

Проблемы у Вас не в том, что Вы "хранимки не писАли".

автор
и это дело все отрабатывает минут 10


Рекомендации по оформлению сообщений в форуме п.6
14 фев 13, 22:01    [13928992]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
а еще существует такая вещь как prepared statement
14 фев 13, 22:02    [13928995]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Beltar
Member

Откуда:
Сообщений: 214
2 pkarklin

Ну хорошо.
Тогда сформулирую вопрос по-другому.

Нужно переписать в виде хранимой процедуры запрос типа
SET IDENTITY_INSERT ТаблицаХ OFF
Insert Into ТаблицаХ
Values (1, '2013.01.01 01:01:01', 10.5)

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

Или иным способом избавиться от парсинга текста запроса при каждом вызове. Где именно будет скомпилированный запрос, на серваке, или на клиенте не принципиально.

а еще существует такая вещь как prepared statement


Раньше не использовал, но, возможно, тоже вариант. Спс.
14 фев 13, 22:24    [13929086]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Beltar,

Откройте для себя массовую заливку. Откуда приходят данные?
14 фев 13, 22:37    [13929139]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Beltar,

Вы искренне полагаете, что вставлять можно только по одной записи через VALUES()?
И очень нехорошее у Вас строковое представление даты.
15 фев 13, 09:45    [13930071]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Beltar
Member

Откуда:
Сообщений: 214
Откуда приходят данные?


Данные берутся из текстовых файлов. Распарсить там не проблема.
Далее код (Delphi XE) примерно такой:

for i:=1 to Число_файлов do
for j:=0 to СтрокВФайле do
begin
РаспарситьСтроку;
ЗакинутьДанныеВБазу;
Периодически Application.ProcessMessages
end;

В реале там число строк в файлах разное, но это копеечные проверки. Парсинг я вряд ли оптимизирую, он за счет методов TStrings, а вот собирать для каждой вставки новый текст запроса, который потом будет парситься SQL-движком как-то глупо.

В общем я пока сделал так:
Загнал в дизайнере в запрос

SET IDENTITY_INSERT ДанныеВход OFF
Insert Into ДанныеВход
Values ( :FV , :D , :V )

Включил prepared
Время выполнения упало с примерно 300 секунд до 180-190. Минус, имя таблицы передать, как параметр, хотя могу это элементарно обойти просто заранее создав массив запросов.
В принципе неплохо, но проверить, как будет с хранимкой тоже смысл есть, прежде чем начинать с многопоточностью или еще чем-то экспериментировать.
15 фев 13, 16:05    [13932766]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Glory
Member

Откуда:
Сообщений: 104751
Используйте массовую загрузку
BULK INSERT или bcp.exe
15 фев 13, 16:08    [13932793]     Ответить | Цитировать Сообщить модератору
 Re: Создание хранимой процедуры Incorrect syntax  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Beltar
Данные берутся из текстовых файлов. Распарсить там не проблема.
...
Парсинг я вряд ли оптимизирую, он за счет методов TStrings

Покажите пример нескольких строк файла. Может, и правда можно BULK INSERT'ом всё раскидать. Будете удивлены скоростью загрузки.
15 фев 13, 16:39    [13933065]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить