powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание доп.колонки во временной таблице для нескольких встроенных процедур
17 сообщений из 17, страница 1 из 1
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40078679
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
есть хранимая процедура, которая вычисляет поступления денег по магазину за день.
Я создаю таблицу CREATE TABLE и выгружаю в нее данные. Поскольку мне нужны данные по нескольким
дням, я выгружаю несколько раз. Код следующий

drop table if exists #tmp
CREATE TABLE #tmp (market_name varchar(255), и так далее))
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-17 00:00:00.000', @pend_date = '2021-06-17 23:59:00.000'
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-16 00:00:00.000', @pend_date = '2021-06-16 23:59:00.000'
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-15 00:00:00.000', @pend_date = '2021-06-15 23:59:00.000'

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

drop table if exists #tmp
CREATE TABLE #tmp (market_name varchar(255), и так далее))
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-17 00:00:00.000', @pend_date = '2021-06-17 23:59:00.000'
alter table #tmpBusicasapodnyam add datecurra datetime NOT NULL DEFAULT '2021-06-17 00:00:00.000'
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-16 00:00:00.000', @pend_date = '2021-06-16 23:59:00.000'
INSERT INTO #tmp
execute mp_get_rep @pstart_date = '2021-06-15 00:00:00.000', @pend_date = '2021-06-15 23:59:00.000'

Я сделал это, но криво, так как после добавления столбца уже
следующая хранимая процедура ругается, что количество столбцов не соответсвует.
Подскажите, как правильно добавить колонку с датой в конце выгрузки хранимой процедуры?
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40078681
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

используйте линк-петлю.
тогда обращение сможете завернуть через openrowset

вида:
Код: sql
1.
2.
3.
4.
5.
insert into #tmp
select '20210617' as [date], t.* from openrowset([LOOPBACK], 'exec mp_gget_rep @pstart_date = ''20210617'', @pend_date = ''20210617 23:59''') t

insert into #tmp
select '20210618' as [date], t.* from openrowset([LOOPBACK], 'exec mp_gget_rep @pstart_date = ''20210618'', @pend_date = ''20210618 23:59''') t
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40078684
stdvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gerzzog

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


нужно указывать столбцы:
INSERT INTO #tmp (market_name, ...)
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079077
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stdvb,
ок, попробую. Просто там 117 столбцов в таблице((((
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079088
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stdvb
gerzzog

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


нужно указывать столбцы:
INSERT INTO #tmp (market_name, ...)


Ок, получилось, но как мне прописывать каждый раз новое значение даты?
Какой код нужно прописать, чтобы одновременно с внесением данных по хранимой процедуре, вносилась дата в последний столбец?

insert into #tmp (перечисляю необходимые столбцы)
execute mp_get_rep @pstart_date = '2021-06-17 00:00:00.000', @pend_date = '2021-06-17 23:59:00.000'
???? как тут дату прописать для отдельного столбца?
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079091
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
gerzzog,

используйте линк-петлю.
тогда обращение сможете завернуть через openrowset

вида:
Код: sql
1.
2.
3.
4.
5.
insert into #tmp
select '20210617' as [date], t.* from openrowset([LOOPBACK], 'exec mp_gget_rep @pstart_date = ''20210617'', @pend_date = ''20210617 23:59''') t

insert into #tmp
select '20210618' as [date], t.* from openrowset([LOOPBACK], 'exec mp_gget_rep @pstart_date = ''20210618'', @pend_date = ''20210618 23:59''') t


спасибо, но не могу разобраться. пишет ошибку на синтаксис возле поля [LOOPBACK]. Пробовал по разному, но я первый раз сталкиваюсь с операторами openrowset и [LOOPBACK]. Не знаю в чем может быть проблема
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079092
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog
stdvb
пропущено...


нужно указывать столбцы:
INSERT INTO #tmp (market_name, ...)


Ок, получилось, но как мне прописывать каждый раз новое значение даты?
Какой код нужно прописать, чтобы одновременно с внесением данных по хранимой процедуре, вносилась дата в последний столбец?

insert into #tmp (перечисляю необходимые столбцы)
execute mp_get_rep @pstart_date = '2021-06-17 00:00:00.000', @pend_date = '2021-06-17 23:59:00.000'
???? как тут дату прописать для отдельного столбца?


Код: sql
1.
alter table #tmpBusicasapodnyam add datecurra datetime NOT NULL DEFAULT getdate()
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079096
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

мне нужно много раз выполнять хранимую процедуру и я когда ввожу код такого плана:

insert into #tmpB
execute ...
alter table #tmp add
insert into #tmpB
execute ...
alter table #tmp add

он мне выдает ошибку:

Msg 2705, Level 16, State 4, Line 11
Column names in each table must be unique. Column name 'datecurra' in table '#tmpBusicasapodnyam' is specified more than once.

типа несколько раз создал стобец. А мне надо один раз создать столбец datecurra и потом менять значение datecurra
каждый раз при запуске хранимой процедуры
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079105
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

я перепутал openrowset с openquery.
вы хотя бы справку читанули бы по ней, там же видно из документации что для openrowset несколько другой синтаксис.
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079130
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
gerzzog,

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

Ок, спасибо, большое. Читал, но я сходу на LOOPBACK запнулся. Вообще не понял как это работает, честно говоря. По запросу
там сразу довольно продвинутый уровень обсуждается... Как видите, по моему коду, я начинающий) Попробую разобраться

внес изменения и выходит ошибка:

Msg 7202, Level 11, State 2, Line 4
Could not find server 'LOOPBACK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedur...

подскажите, пожалуйста, что это может быть?
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079140
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gerzzog
felix_ff
gerzzog,

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

Ок, спасибо, большое. Читал, но я сходу на LOOPBACK запнулся. Вообще не понял как это работает, честно говоря. По запросу
там сразу довольно продвинутый уровень обсуждается... Как видите, по моему коду, я начинающий) Попробую разобраться

внес изменения и выходит ошибка:

Msg 7202, Level 11, State 2, Line 4
Could not find server 'LOOPBACK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedur...

подскажите, пожалуйста, что это может быть?


Если, вместо loopback воожу название сервера, выдает ошибку
Msg 7411, Level 16, State 1, Line 4
Server '.....' is not configured for DATA ACCESS.
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079142
stdvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gerzzog
aleks222,

мне нужно много раз выполнять хранимую процедуру и я когда ввожу код такого плана:

insert into #tmpB
execute ...
alter table #tmp add
insert into #tmpB
execute ...
alter table #tmp add

он мне выдает ошибку:

Msg 2705, Level 16, State 4, Line 11
Column names in each table must be unique. Column name 'datecurra' in table '#tmpBusicasapodnyam' is specified more than once.

типа несколько раз создал стобец. А мне надо один раз создать столбец datecurra и потом менять значение datecurra
каждый раз при запуске хранимой процедуры


Сначала создать столбец без значения по умолчанию:
Код: sql
1.
2.
3.
4.
5.
alter table #tmp add constraint df_datecurra default '...' for datecurra;
insert 
alter table #tmp drop constraint df_datecurra;
alter table #tmp add constraint df_datecurra default '...' for datecurra;
insert 
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079151
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stdvb
gerzzog
aleks222,

мне нужно много раз выполнять хранимую процедуру и я когда ввожу код такого плана:

insert into #tmpB
execute ...
alter table #tmp add
insert into #tmpB
execute ...
alter table #tmp add

он мне выдает ошибку:

Msg 2705, Level 16, State 4, Line 11
Column names in each table must be unique. Column name 'datecurra' in table '#tmpBusicasapodnyam' is specified more than once.

типа несколько раз создал стобец. А мне надо один раз создать столбец datecurra и потом менять значение datecurra
каждый раз при запуске хранимой процедуры


Сначала создать столбец без значения по умолчанию:
Код: sql
1.
2.
3.
4.
5.
alter table #tmp add constraint df_datecurra default '...' for datecurra;
insert 
alter table #tmp drop constraint df_datecurra;
alter table #tmp add constraint df_datecurra default '...' for datecurra;
insert 



Фуххх...что-то запутался...А где вставлять код execute ?
А то ошибку выбивает:
Msg 1752, Level 16, State 0, Line 7
Column 'datecurra' in table '#tmpBusicasapodnyam' is invalid for creating a default constraint.
Msg 1750, Level 16, State 0, Line 7
Could not create constraint or index. See previous errors.

где-то я намудрил
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079162
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

вам сначала нужно создать на вашем сервере линкованный сервер на самого себя

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @srv sysname = @@SERVERNAME;
exec master.dbo.sp_addlinkedserver @server = N'loopback', @srvproduct =N'', @provider=N'SQLNCLI11', @datasrc = @srv;

exec master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'loopback', @useself=N'true', @locallogin=NULL, @rmtuser=NULL, @rmtpassword=NULL

exec master.dbo.sp_serveroption @server =N'loopback', @optname = N'data access', @optvalue=N'true'
exec master.dbo.sp_serveroption @server =N'loopback', @optname = N'rpc', @optvalue=N'true'
exec master.dbo.sp_serveroption @server =N'loopback', @optname = N'rpc out', @optvalue=N'true'



в зависимости от применения openquery несколько могут меняться параметры настройки линка
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079164
stdvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gerzzog
где-то я намудрил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
drop table if exists #tmp
CREATE TABLE #tmp (market_name varchar(255), и так далее))
alter table #tmp add datecurra datetime NOT NULL;
alter table #tmp add constraint df_datecurra default '...' for datecurra;
INSERT INTO #tmp (market_name, и так далее)
execute mp_get_rep @pstart_date = '2021-06-16 00:00:00.000', @pend_date = '2021-06-16 23:59:00.000'

alter table #tmp drop constraint df_datecurra;
alter table #tmp add constraint df_datecurra default '...' for datecurra;
INSERT INTO #tmp (market_name, и так далее)
execute mp_get_rep @pstart_date = '2021-06-15 00:00:00.000', @pend_date = '2021-06-15 23:59:00.000'
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079167
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,
блин, наши айтишники не пойдут на такое( нам и так дали со скрипом доступ к серверу с ограниченным доступом)
но спасибо, попробую разобраться для общего развития!
...
Рейтинг: 0 / 0
Создание доп.колонки во временной таблице для нескольких встроенных процедур
    #40079176
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stdvb,
большое спасибо
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание доп.колонки во временной таблице для нескольких встроенных процедур
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]