Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / declare set select / 13 сообщений из 13, страница 1 из 1
01.09.2021, 13:51
    #40094372
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
Подскажите как получить результат значение - как результат выполнения запроса
Сейчас просто выводится сам запрос select dt from ( Select max(report_date) as dt from dev.snap2020) а нужен результат выполнения запроса
Код: sql
1.
2.
3.
4.
5.
6.
[SRC PLSQL]
declare @table_name varchar(4000),
@year varchar(4000)
set @year = FORMAT(DATEADD(year, -1, GETDATE()), 'yyyy')
set @table_name = 'select dt from ( Select max(report_date) as dt from dev.snap) ' + @year
Select @table_name

[/SRC]
...
Рейтинг: 0 / 0
01.09.2021, 14:10
    #40094386
PaulYoung
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
x17.mstu,

Код: sql
1.
exec (@table_name)
...
Рейтинг: 0 / 0
01.09.2021, 14:25
    #40094403
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
PaulYoung,

а как результат exec записать в переменную
например Select @var = (exec())
Можно как нибудб сдедать такое?
...
Рейтинг: 0 / 0
01.09.2021, 14:42
    #40094408
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
x17.mstu,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @i INT;

EXEC sp_executesql 
     @stmt = N'SELECT @i = 10^2|3', 
     @params = N'@i INT OUTPUT', 
     @i = @i OUTPUT;

SELECT @i;
...
Рейтинг: 0 / 0
01.09.2021, 15:26
    #40094432
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
Попробовал сделать

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE @prm_loadOUT NVARCHAR(1000)
DECLARE @vQuery NVARCHAR(1000)

SET @vQuery = N'declare 
@max_report_date_cdr_old varchar(4000),
@prev_year varchar(4000)
set @prev_year = FORMAT(DATEADD(year, -1, GETDATE()),''yyyy'') 
set @max_report_date_cdr_old = ''Select dt from (select max(report_date) as dt from snapshot_'' + @prev_year + '')x''
select @prm_loadOUT = @max_report_date_cdr_old'

EXEC SP_EXECUTESQL 
        @Query  = @vQuery
      , @Params = N'@prm_loadOUT NVARCHAR(1000)  OUTPUT'
      , @prm_loadOUT = @prm_loadOUT OUTPUT

Select @prm_loadOUT



, но не помогает помогает если вместо Select @prm_loadOUT поставить exec(@prm_loadOUT) - тогда все ok
А мне нужно чтобы сразу было возвращаемое значение
Что делаю не так?
...
Рейтинг: 0 / 0
01.09.2021, 15:50
    #40094453
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
x17.mstu,


Зачем все в кучу туда?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @dt DATETIME;

DECLARE @cmd NVARCHAR(max) = N'SELECT @dtout = MAX(report_date) FROM dev.snap2020'

EXEC sp_executesql 
     @stmt = @cmd, 
     @params = N'@dtout  DATETIME OUTPUT', 
     @dtout = @dt OUTPUT;

SELECT @dt;




т.е. вам нужно сформировать строку 'SELECT @dtout = MAX(report_date) FROM dev.snap2020'
...
Рейтинг: 0 / 0
01.09.2021, 16:00
    #40094458
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
Код: sql
1.
DECLARE @cmd NVARCHAR(max) = N'SELECT @dtout = MAX(report_date) FROM dev.snap' + CONVERT(NVARCHAR(4), YEAR(GETDATE())-1)
...
Рейтинг: 0 / 0
02.09.2021, 20:21
    #40094928
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
Oleg_SQL,
так это выполниится, НО Все что после между N' и ' берется как value из таблицы как строка
Как в таком случае быть?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE @prm_loadOUT NVARCHAR(1000)
DECLARE @vQuery NVARCHAR(1000)

SET @vQuery = N'declare @prev_year varchar(4000) 
set @prev_year = ''''
select @prev_year = @prev_year + CONVERT(NVARCHAR(4), YEAR(GETDATE())-1)
set @prev_year = ''select @prm_loadOUT =  max(report_date) from snapshot_''+ @prev_year
select @prm_loadOUT = @prev_year'

EXEC SP_EXECUTESQL 
        @Query  = @vQuery
      , @Params = N'@prm_loadOUT NVARCHAR(1000)  OUTPUT'
      , @prm_loadOUT = @prm_loadOUT OUTPUT


SELECT @prm_loadOUT

возвращает ->
select @prm_loadOUT = max(report_date) from snapshot_2020 , а нужно просто дату
...
Рейтинг: 0 / 0
02.09.2021, 21:07
    #40094937
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
declare
@prm_loadOUT date,
@query nvarchar(max) = formatmessage(N'select @prm_loadOUT = max(report_date) from snapshot_%d', year(getdate()) - 1);

exec sys.sp_executesql @query, N'@prm_loadOUT date output', @prm_loadOUT output;
...
Рейтинг: 0 / 0
03.09.2021, 09:30
    #40095006
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
x17.mstu,


А зачем так хранить ?
Но если уж так, то добавьте еще один вызов.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;
SET NOCOUNT ON;

DROP TABLE IF EXISTS #snapshot_2020
GO

CREATE TABLE #snapshot_2020 (report_date DATE)
GO
INSERT #snapshot_2020 VALUES ('20190703'), ('20180208'), ('20171205')
GO

DECLARE @prm_loadOUT NVARCHAR(1000)
DECLARE @vQuery NVARCHAR(1000)

SET @vQuery = N'declare @prev_year varchar(4000) 
set @prev_year = ''''
select @prev_year = @prev_year + CONVERT(NVARCHAR(4), YEAR(GETDATE())-1)
set @prev_year = ''select @prm_loadOUT =  max(report_date) from #snapshot_''+ @prev_year
select @prm_loadOUT = @prev_year'

EXEC SP_EXECUTESQL 
        @Query  = @vQuery
      , @Params = N'@prm_loadOUT NVARCHAR(1000)  OUTPUT'
      , @prm_loadOUT = @prm_loadOUT OUTPUT


-- ДОБАВЛЯЕМ:

DECLARE @dt DATETIME;

EXEC sp_executesql 
     @stmt = @prm_loadOUT, 
     @params = N'@prm_loadOUT DATETIME OUTPUT', 
     @prm_loadOUT = @dt OUTPUT;

SELECT @dt
...
Рейтинг: 0 / 0
29.09.2021, 12:51
    #40100652
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
В итоге хотелось видеть вот такое решение и оно рабочее

Код: sql
1.
2.
3.
4.
5.
6.
declare @sql_prev_year nvarchar(4000)=''
declare @prev_year nvarchar(20) = convert(nvarchar(4), year(getdate())-1)
declare @max_report_date table (max_report_date nvarchar(20))
set @sql_prev_year = 'select max(report_date) from snap_' + @prev_year
insert @max_report_date exec(@sql_prev_year)
select max_report_date from @max_report_date
...
Рейтинг: 0 / 0
29.09.2021, 13:34
    #40100667
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
x17.mstu
В итоге хотелось видеть вот такое решение и оно рабочее

Код: sql
1.
2.
3.
4.
5.
6.
declare @sql_prev_year nvarchar(4000)=''
declare @prev_year nvarchar(20) = convert(nvarchar(4), year(getdate())-1)
declare @max_report_date table (max_report_date nvarchar(20))
set @sql_prev_year = 'select max(report_date) from snap_' + @prev_year
insert @max_report_date exec(@sql_prev_year)
select max_report_date from @max_report_date



Может оно и "рабочее", только забористую травку вы там курите.
...
Рейтинг: 0 / 0
29.09.2021, 13:49
    #40100669
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
declare set select
Нужда в травке отпадет, как только вы подучите реляционную теорию.
И перестанете хранить однородные данные в разных таблицах.

Для ясельников: заголовок таблицы не место для хранения данных.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / declare set select / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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