2014-10-16 3 views
0

Я создал представление для каждого месяца, но это только для текущего месяца. Я пытаюсь найти способ, которым я могу сделать его динамичным. У меня есть это представление, которое вызывается хранимой процедурой, но кажется, что я что-то упускаю.Просмотр встроенной хранимой процедуры с использованием SQL Sever 2008

Вот мой скрипт для просмотра

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS 
      WHERE TABLE_NAME = 'december_permonth_view') 
    DROP VIEW december_permonth_view <--range from Jan to dec 
GO 

CREATE VIEW december_permonth_view <--range from Jan to dec 
AS 
    SELECT * 
    FROM TblGPSCur 
    WHERE PHILTIME BETWEEN '2014-12-01 00:00:00.000' AND '2014-12-31 23:59:59.000' <--dont know how to make it dynamic 
GO 

Теперь вот моя хранимая процедура, которая вызывает вид указанной выше

CREATE PROCEDURE ProcessByMonth 
    @from_date datetime , 
    @to_date datetime 
AS 
BEGIN 
    DECLARE @month AS INT 
    SET @month = (SELECT MONTH(GETDATE())) 

    SET NOCOUNT ON; 

    IF @month = '1' 
    BEGIN 
     SELECT * january_permonth_view 
    END 

    IF @month = '2' 
    BEGIN 
    SELECT * february_permonth_view 
    END 

    IF @month = '3' 
    BEGIN 
     SELECT * march_permonth_view 
    END 

    IF @month = '4' 
    BEGIN 
     SELECT * april_permonth_view 
    END 
IF @month = '5' 
BEGIN 
SELECT * may_permonth_view 
END 
IF @month = '6' 
BEGIN 
SELECT * june_permonth_view 
END 
IF @month = '7' 
BEGIN 
SELECT * july_permonth_view 
END 
IF @month = '8' 
BEGIN 
SELECT * august_permonth_view 
END 
IF @month = '9' 
BEGIN 
SELECT * september_permonth_view 
END 
IF @month = '10' 
BEGIN 
SELECT * october_permonth_view 
END 
IF @month = '11' 
BEGIN 
SELECT * november_permonth_view 
END 
IF @month = '12' 
BEGIN 
SELECT * december_permonth_view 
END 
END 
GO 

Может кто-то помочь мне, где я пошло не так.

Спасибо.

+0

Waaaaay для многих видов! Вы все это пишете ... –

ответ

1

Что такое сделка со всеми этими видами? Вместо создания soooo многих представлений ... не так просто просто создать хранимую процедуру, которая принимает диапазон дат (два date s ... NOT datetime s) и выполнить оператор выбора, который фильтрует результирующий набор для этого диапазон дат?

create procedure ProcessByMonth 
    @from_date datetime , 
    @to_date datetime 
as 
begin 
    select * from TblGPSCur where PHILTIME between @from_date and @to_date; 
end 
go 

это все, что вам нужно. Не нужно переучивать всю вещь

+1

+1 абсолютно. Или если по какой-то причине должно быть представление - по крайней мере, создать ** одно представление ** с столбцом «месяц», поэтому выбор будет выглядеть следующим образом: 'SELECT * yearview WHERE month = @ month' вместо 12 отдельных просмотров .... –

Смежные вопросы