powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / declare set select
13 сообщений из 13, страница 1 из 1
declare set select
    #40094372
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как получить результат значение - как результат выполнения запроса
Сейчас просто выводится сам запрос 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
declare set select
    #40094386
Фотография PaulYoung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

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

а как результат exec записать в переменную
например Select @var = (exec())
Можно как нибудб сдедать такое?
...
Рейтинг: 0 / 0
declare set select
    #40094408
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
declare set select
    #40094432
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал сделать

Код: 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
declare set select
    #40094453
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
declare set select
    #40094458
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
DECLARE @cmd NVARCHAR(max) = N'SELECT @dtout = MAX(report_date) FROM dev.snap' + CONVERT(NVARCHAR(4), YEAR(GETDATE())-1)
...
Рейтинг: 0 / 0
declare set select
    #40094928
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
declare set select
    #40094937
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
declare set select
    #40095006
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
declare set select
    #40100652
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
declare set select
    #40100667
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
declare set select
    #40100669
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужда в травке отпадет, как только вы подучите реляционную теорию.
И перестанете хранить однородные данные в разных таблицах.

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


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