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

Откуда:
Сообщений: 207
Здравствуйте, подскажите пожалуйста по работе хранимой процедуры,
написал процедуру которая выбирает данные из одной таблицы 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]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Кесарь
Member

Откуда:
Сообщений: 453
martinezo,

values замените на select, который будет не записывать значения в переменные, а давать выборку.
4 май 18, 17:01    [21388124]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Изучить синтаксис команды insert into ... select ...
4 май 18, 17:02    [21388126]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1507
martinezo,

почитать внимательнее документацию и понять, что все написанное заменяется одной командой insert... select... без переменных и процедуры.
4 май 18, 17:02    [21388129]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
через insert .... select я знаю как сделать

интересует именно как реализовать через хранимую процедуру
4 май 18, 17:14    [21388164]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
martinezo
через insert .... select я знаю как сделать

интересует именно как реализовать через хранимую процедуру
Взять и засунуть insert ... select в процедуру.
4 май 18, 17:19    [21388174]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
написал так:
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]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
martinezo
после запуска процедуры было написано - команда выполнена успешно, однако в таблицу dbo.test_table ничего не записалось
А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться?
4 май 18, 17:32    [21388219]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
>>>А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться?

за этим и написал на форуме, подскажите, что не так, почему не записывается?
4 май 18, 17:40    [21388249]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1507
martinezo
>>>А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться?

за этим и написал на форуме, подскажите, что не так, почему не записывается?
Может потому, что записываться нечему? Вы свой
select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE where TD_NUMBER=5127
хотя бы пробовали выполнять? Если да, то кс каким результатом?
4 май 18, 17:45    [21388262]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
martinezo
>>>А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться?

за этим и написал на форуме, подскажите, что не так, почему не записывается?
"Я открыл холодильник, а там нет еды. Подскажите мне, что не так и почему ее там нет".
4 май 18, 17:45    [21388263]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
Sergey Sizov
martinezo
>>>А есть хоть одна причина, почему в таблицу dbo.test_table должно было что-то записаться?

за этим и написал на форуме, подскажите, что не так, почему не записывается?
Может потому, что записываться нечему? Вы свой
select REPORT_DATE, TD_NUMBER, reporterfio, ReportFormat from dbo.SVR_FILE where TD_NUMBER=5127
хотя бы пробовали выполнять? Если да, то кс каким результатом?


да выходит 35 строк
4 май 18, 17:49    [21388275]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Покажите код вызова процедуры. Покажите план выполнения процедуры. Покажите код проверки таблицы dbo.test_table.
4 май 18, 17:51    [21388277]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
martinezo
написал так:
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 ничего не записалось
В INSERTе всегда пишите в скобках список полей, в которые вставляете.
Это практически закон.
4 май 18, 17:51    [21388278]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Да! И выбросьте из процедуры все переменные. Зачем они?
4 май 18, 17:52    [21388283]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
iap
martinezo
написал так:
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 ничего не записалось
В INSERTе всегда пишите в скобках список полей, в которые вставляете.
Это практически закон.



написал так:
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]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
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]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
iap
martinezo,

Надо так:
INSERT dbo.test_table(dt,shop,shop_name,result)
SELECT REPORT_DATE,TD_NUMBER,reporterfio,ReportFormat
FROM dbo.SVR_FILE;


написал так:

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]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
martinezo
но ничего не добавилось
Ясен пень. Чтобы добавилось, процедуру надо запустить.

Сообщение было отредактировано: 4 май 18, 18:39
4 май 18, 18:39    [21388397]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
martinezo,

После ALTER PROCEDURE [dbo].[addtest] ...как будто здесь был текст этой процедуры.... нужно сделать EXEC [dbo].[addtest]. И все будет хорошо.
4 май 18, 18:55    [21388412]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
Гавриленко Сергей Алексеевич
martinezo
но ничего не добавилось
Ясен пень. Чтобы добавилось, процедуру надо запустить.


))) Спасибо - получилось
4 май 18, 18:56    [21388414]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
martinezo
Member

Откуда:
Сообщений: 207
iap
martinezo,

Надо так:
INSERT dbo.test_table(dt,shop,shop_name,result)
SELECT REPORT_DATE,TD_NUMBER,reporterfio,ReportFormat
FROM dbo.SVR_FILE;


Подскажите, пожалуйста, обязательно ли надо было ставить "; " после запроса?
и если несколько запросов идут в процедуре по очереди, их тоже надо разделять точкой с запятой?
Спасибо
4 май 18, 19:02    [21388422]     Ответить | Цитировать Сообщить модератору
 Re: вызов процедуры для записи строк из одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
martinezo
iap
martinezo,

Надо так:
INSERT dbo.test_table(dt,shop,shop_name,result)
SELECT REPORT_DATE,TD_NUMBER,reporterfio,ReportFormat
FROM dbo.SVR_FILE;



Подскажите, пожалуйста, обязательно ли надо было ставить "; " после запроса?
и если несколько запросов идут в процедуре по очереди, их тоже надо разделять точкой с запятой?
Спасибо
Пока обязательно только в некоторых случаях.
Но обещают сделать обязательным в следующих версиях.
4 май 18, 19:16    [21388443]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить