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

Откуда:
Сообщений: 9
Не получается сохранить вьюху с переменными.
На следующий код пишет "Incorrect syntax near the keyword 'declare'."
Что нужно переделать, чтобы запустилось без ошибок?

CREATE VIEW M77 as

declare @date datetime
declare @d1 datetime
declare @d2 int
set @date = (CAST(SUBSTRING(CAST(GETDATE() AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
set datefirst 1
set @d1 = dateadd(dd, -datepart(dw, @date) + 1, @date)-7
set @d2 = datepart(ww, GETDATE())-1

select @d1 as q,@d2 as w
26 дек 15, 11:39    [18612952]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
правильный проходящий.
Guest
TrAns1st0rrr,
не плодить ненужные переменные и всё сделать непосредственно в запросе.
26 дек 15, 11:50    [18612970]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
правильный проходящий.
TrAns1st0rrr,
не плодить ненужные переменные и всё сделать непосредственно в запросе.

Это понятно.
Но в моем вопросе лишь часть от общего кода и он увеличится в десятки раз без переменных.

Я не могу понять как сохранить вьюху с переменными. Без сохранения - данный запрос выполняется без ошибок.
26 дек 15, 12:04    [18613001]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
правильный проходящий.
Guest
TrAns1st0rrr
Я не могу понять как сохранить вьюху с переменными. Без сохранения - данный запрос выполняется без ошибок.
Никак. Не надо путать божий дар с яичницей. Вам нужна табличная функция, а не вьюха. Или вы не в курсе что это такое и с чем его едят?
26 дек 15, 12:07    [18613012]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
правильный проходящий.
Никак. Не надо путать божий дар с яичницей. Вам нужна табличная функция, а не вьюха. Или вы не в курсе что это такое и с чем его едят?

Впервые о таком услышал.
Только что попробовал по примерам и понял, что мне нужна помощь с этим.
На мой пример пока реализовать не получилось.
26 дек 15, 12:29    [18613033]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
SET DATEFIRST 1 в функциях запрещено (как и все прочие SETы).
Да и вообще никогда и нигде не нужно.
26 дек 15, 13:14    [18613061]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
iap
SET DATEFIRST 1 в функциях запрещено (как и все прочие SETы).
Да и вообще никогда и нигде не нужно.

Как тогда присвоить значения переменным в функции?
Без SET DATEFIRST 1 неделя начинается с воскресенья((
26 дек 15, 13:39    [18613090]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
TrAns1st0rrr
iap
SET DATEFIRST 1 в функциях запрещено (как и все прочие SETы).
Да и вообще никогда и нигде не нужно.

Как тогда присвоить значения переменным в функции?
Без SET DATEFIRST 1 неделя начинается с воскресенья((
Для кого FAQ писали?
Скажите русским языком, что должно вернуться.
И надо делать inline функцию, а не multistatement
26 дек 15, 17:15    [18613414]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
iap
Скажите русским языком, что должно вернуться.
И надо делать inline функцию, а не multistatement

Как из этого кода сделать вьюху?
declare @d1 int
set @d1 = 10
select @d1


Я пока не понимаю, как с помощью функций это реализовать.
26 дек 15, 18:10    [18613587]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Glory
Member

Откуда:
Сообщений: 104751
TrAns1st0rrr
Как из этого кода сделать вьюху?
declare @d1 int
set @d1 = 10
select @d1

Никак. Для получения ответа на этот вопрос достачно было ознакомиться в хелпе с синтаксисом CREATE VIEW
26 дек 15, 21:08    [18614030]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
Glory,
Хелп я прочитал, но в решении данной задачи это не помогло.
Выше по теме были предложения присвоить значения функциями, но я не совсем понимаю как это сделать.
27 дек 15, 17:43    [18615429]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
Хватит уже издеваться над человеком.

TrAns1st0rrr, всё просто.

CREATE VIEW M77 as
select 
  d1 = dateadd(dd, -datepart(dw, date) + 1, date)-7,
  d2 = datepart(ww, GETDATE())-1
from (
  select
    date = (CAST(SUBSTRING(CAST(GETDATE() AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
) a


Только GETDATE() лучше тоже вынести в поле. А то нет уверенности, что она в обоих местах выдаст одинаковое значение.

CREATE VIEW M77 as
select 
  d1 = dateadd(dd, -datepart(dw, date) + 1, date)-7,
  d2 = datepart(ww, date1)-1
from (
  select
    date1,
    date = (CAST(SUBSTRING(CAST(date1 AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
  from (select date1 = GETDATE()) a
) a
27 дек 15, 18:20    [18615526]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Может вы целиком приведете что вам надо? Если фильтрация данных с внешней переменной, то это точно не вьюха
27 дек 15, 18:27    [18615547]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
incorrect syntax the hole
Guest
TrAns1st0rrr
Glory,
Хелп я прочитал, но в решении данной задачи это не помогло.
Выше по теме были предложения присвоить значения функциями, но я не совсем понимаю как это сделать.

не присвоить значения функциями, а написать всё это в виде функции
у вьюх не бывает аргументов и переменных
для этих целей предназначены функции и процедуры
27 дек 15, 20:59    [18615972]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Glory
Member

Откуда:
Сообщений: 104751
TrAns1st0rrr
Glory,
Хелп я прочитал, но в решении данной задачи это не помогло.

И что в прочитанном вами хелпе фигурировали переменные в тексте представления ?
Что в прочитанном вами хелпе вообще было сказано про текст предстваления ?
27 дек 15, 21:16    [18615997]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
Проблема в том, на текущем уровне, не зная некоторых понятий (типа инлайнфункции) и не умея вычислять день недели, не зависящий от datefirst, невозможно понять смысл комментариев.
Вот что имели ввиду предыдущие ораторы:

create function dbo.SomeStrangeInlineFunction()
returns table
as
return
(
     with df as (
       select 
          TodayWeekDay = (datepart(weekday, getdate()) + @@DATEFIRST - 2) %7 + 1
         ,Today = cast(cast(getdate() as date) as datetime)
     )
     select 
          MondayAtWeekAgo = Today - 7 - TodayWeekDay + 1
         ,WeekNoAtMondayAtWeekAgo = datepart(isowk, (Today - 7 - TodayWeekDay + 1))
       from df
);
go

select * from dbo.SomeStrangeInlineFunction()
;
go 

create view dbo.SomeStrangeView as 
     with df as (
       select 
          TodayWeekDay = (datepart(weekday, getdate()) + @@DATEFIRST - 2) %7 + 1
         ,Today = cast(cast(getdate() as date) as datetime)
     )
     select 
          MondayAtWeekAgo = Today - 7 - TodayWeekDay + 1
         ,WeekNoAtMondayAtWeekAgo = datepart(isowk, (Today - 7 - TodayWeekDay + 1))
       from df;
go       

select * from dbo.SomeStrangeView



TrAns1st0rrr
Не получается сохранить вьюху с переменными.
На следующий код пишет "Incorrect syntax near the keyword 'declare'."
Что нужно переделать, чтобы запустилось без ошибок?

CREATE VIEW M77 as

declare @date datetime
declare @d1 datetime
declare @d2 int
set @date = (CAST(SUBSTRING(CAST(GETDATE() AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
set datefirst 1
set @d1 = dateadd(dd, -datepart(dw, @date) + 1, @date)-7
set @d2 = datepart(ww, GETDATE())-1

select @d1 as q,@d2 as w
28 дек 15, 11:50    [18617549]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
работает с версии 2008.
если более старый, то можно:
* обрезать дату к примеру как в исходном вопросе
* и with (которое есть CTE) заменить на подзапрос
28 дек 15, 11:54    [18617579]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Bator,

TrAns1st0rrr же хотел ещё параметры. Добавить в функцию параметр @date DATETIME
28 дек 15, 12:01    [18617608]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
iap
Bator,

TrAns1st0rrr же хотел ещё параметры. Добавить в функцию параметр @date DATETIME


вангую, что это он так пытался посредством переменных решить свою проблему и параметры ему не нужны, а т.к. правильных слов не знает, то написал как смог (-:
28 дек 15, 13:40    [18618096]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
Serg_77m,
Выдает ошибку на оба запроса:
The default schema does not exist.
28 дек 15, 14:36    [18618399]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

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

TrAns1st0rrr же хотел ещё параметры. Добавить в функцию параметр @date DATETIME


вангую, что это он так пытался посредством переменных решить свою проблему и параметры ему не нужны, а т.к. правильных слов не знает, то написал как смог (-:

Да, именно так и было :)
Вариант с функцией помог.
Спасибо!
28 дек 15, 14:37    [18618405]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
TrAns1st0rrr
Serg_77m,
Выдает ошибку на оба запроса:
The default schema does not exist.
Наверное, вместо
CREATE VIEW M77
надо написать:
CREATE VIEW dbo.M77
28 дек 15, 14:45    [18618467]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
в любом случае результат неправильный, если выставлено первый недели день 7, то сейчас будет выдавать 20.12, а нужно 21.12 - не зависимо от того какая настройка первого дня недели.
Serg_77m
TrAns1st0rrr
Serg_77m,
Выдает ошибку на оба запроса:
The default schema does not exist.
Наверное, вместо
CREATE VIEW M77
надо написать:
CREATE VIEW dbo.M77
28 дек 15, 16:02    [18618968]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение View с переменными  [new]
TrAns1st0rrr
Member

Откуда:
Сообщений: 9
Bator
в любом случае результат неправильный, если выставлено первый недели день 7, то сейчас будет выдавать 20.12, а нужно 21.12 - не зависимо от того какая настройка первого дня недели.
Serg_77m
пропущено...
Наверное, вместо
CREATE VIEW M77
надо написать:
CREATE VIEW dbo.M77

Да, считает неправильно.
15 янв 16, 00:09    [18681424]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить