Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
martinezo Member Откуда: Сообщений: 211 |
Здравствуйте, подскажите пожалуйста по работе хранимой процедуры, написал процедуру которая выбирает данные из одной таблицы dbo.SV_FILE (этих данных там сотня), и записывает их в таблицу dbo.test_table USE [SVR_FILES] GO /****** Object: StoredProcedure [dbo].[addtest] Script Date: 04.05.2018 16:46:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[addtest] AS BEGIN declare @sh varchar (10) declare @fio varchar (50) declare @rep_format varchar (10) select @sh=TD_NUMBER, @fio=reporterfio, @rep_format=ReportFormat from dbo.SV_FILE where TD_NUMBER=5127 insert into dbo.test_table values (CURRENT_TIMESTAMP, @sh, @fio, @rep_format) END После отработки процедуры - она записывает только одну строку из dbo.SV_FILE в dbo.test_table при запуске заново процедуры - записывает еще одну строку в dbo.test_table, подскажите пожалуйста, как сделать чтобы за один запуск процедуры записывались все строки из dbo.SV_FILE в dbo.test_table , а не по одной как это делается сейчас? Спасибо. |
4 май 18, 16:58 [21388119] Ответить | Цитировать Сообщить модератору |
Кесарь Member Откуда: Сообщений: 463 |
martinezo, values замените на select, который будет не записывать значения в переменные, а давать выборку. |
4 май 18, 17:01 [21388124] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Изучить синтаксис команды insert into ... select ... |
4 май 18, 17:02 [21388126] Ответить | Цитировать Сообщить модератору |
Sergey Sizov Member Откуда: Сообщений: 1564 |
martinezo, почитать внимательнее документацию и понять, что все написанное заменяется одной командой insert... select... без переменных и процедуры. |
4 май 18, 17:02 [21388129] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
через insert .... select я знаю как сделать интересует именно как реализовать через хранимую процедуру |
4 май 18, 17:14 [21388164] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
4 май 18, 17:19 [21388174] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
написал так: ALTER PROCEDURE [dbo].[addtest] AS BEGIN declare @sh varchar (10) declare @fio varchar (50) declare @rep_format varchar (10) insert into dbo.test_table select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE where TD_NUMBER=5127 END после запуска процедуры было написано - команда выполнена успешно, однако в таблицу dbo.test_table ничего не записалось |
4 май 18, 17:31 [21388216] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
4 май 18, 17:32 [21388219] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
>>>А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться? за этим и написал на форуме, подскажите, что не так, почему не записывается? |
4 май 18, 17:40 [21388249] Ответить | Цитировать Сообщить модератору |
Sergey Sizov Member Откуда: Сообщений: 1564 |
select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE where TD_NUMBER=5127хотя бы пробовали выполнять? Если да, то кс каким результатом? |
||
4 май 18, 17:45 [21388262] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
4 май 18, 17:45 [21388263] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
да выходит 35 строк |
||||
4 май 18, 17:49 [21388275] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Покажите код вызова процедуры. Покажите план выполнения процедуры. Покажите код проверки таблицы dbo.test_table. |
4 май 18, 17:51 [21388277] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Это практически закон. |
||
4 май 18, 17:51 [21388278] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Да! И выбросьте из процедуры все переменные. Зачем они? |
4 май 18, 17:52 [21388283] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
написал так: USE [SVR_FILES] GO /****** Object: StoredProcedure [dbo].[addtest] Script Date: 04.05.2018 16:46:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[addtest] AS BEGIN insert into dbo.test_table (dbo.test_table.dt, dbo.test_table.shop, dbo.test_table.shop_name, dbo.test_table.result) select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE END процедура снова ничего не вставила, хотя просто через запрос insert into dbo.test_table (dbo.test_table.dt, dbo.test_table.shop, dbo.test_table.shop_name, dbo.test_table.result) select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE было вставлено 35 строк, что не нравится процедуре - не знаю |
||||
4 май 18, 18:02 [21388320] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
martinezo, Надо так: INSERT dbo.test_table(dt,shop,shop_name,result) SELECT REPORT_DATE,TD_NUMBER,reporterfio,ReportFormat FROM dbo.SVR_FILE; |
4 май 18, 18:29 [21388379] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
написал так: USE [SVR_FILES] GO /****** Object: StoredProcedure [dbo].[addtest] Script Date: 04.05.2018 16:46:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[addtest] AS BEGIN INSERT dbo.test_table(dt,shop,shop_name,result) SELECT REPORT_DATE,TD_NUMBER,reporterfio,ReportFormat FROM dbo.SVR_FILE; END вышло это Command(s) completed successfully. но ничего не добавилось |
||
4 май 18, 18:37 [21388392] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Сообщение было отредактировано: 4 май 18, 18:39 |
||
4 май 18, 18:39 [21388397] Ответить | Цитировать Сообщить модератору |
Andy_OLAP Member Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион Сообщений: 3151 |
martinezo, После ALTER PROCEDURE [dbo].[addtest] ... |
4 май 18, 18:55 [21388412] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
))) Спасибо - получилось |
||||
4 май 18, 18:56 [21388414] Ответить | Цитировать Сообщить модератору |
martinezo Member Откуда: Сообщений: 211 |
Подскажите, пожалуйста, обязательно ли надо было ставить "; " после запроса? и если несколько запросов идут в процедуре по очереди, их тоже надо разделять точкой с запятой? Спасибо |
||
4 май 18, 19:02 [21388422] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Но обещают сделать обязательным в следующих версиях. |
||||
4 май 18, 19:16 [21388443] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |