2013-05-21 3 views
1

Я создал хранимую процедуру, в которой перечислены все клиенты, у которых осталось 7 дней.Сохраненные процедуры SQL Server

CREATE PROC spGetMemReminder 
AS 
    SELECT users.fullname, 
      membership.expiryDate 
    FROM membership 
      INNER JOIN users 
      ON membership.uid = users.uid 
    WHERE CONVERT(VARCHAR(10), expiryDate, 105) = 
      CONVERT(VARCHAR(10), (getdate() + 7), 105) 

Я хотел бы вставить этот список в другую таблицу автоматически. Как мне это достичь? любые предложения оценены. Благодаря

+1

Вы автоматически подразумеваете по расписанию? Если да, то какой выпуск SQL Server вы используете? Также необходимо ли материализовать этот набор результатов в другой таблице? –

+1

Я не вижу причины использовать хранимую процедуру здесь, вместо этого используйте представление. – fancyPants

+0

Я согласен с tombom, я не понимаю, почему здесь нужна хранимая процедура. С видом было бы гораздо легче справиться. –

ответ

0

Что другое предложение ... не написать хранимую процедуру для вставки в временную таблицу, так как данные всегда будут меняться.

Просто напишите мнение ......., и ваш «отчет» использует/потребляет вид.

if exists (select * from sysobjects 
    where id = object_id('dbo.vwExpiringMemberships') and sysstat & 0xf = 2) 
    drop VIEW dbo.vwExpiringMemberships 

GO 


/* 
select * from dbo.vwExpiringMemberships 
*/ 

CREATE VIEW dbo.vwExpiringMemberships AS 

    SELECT usr.fullname, 
      mem.expiryDate 
    FROM dbo.Membership mem 
      INNER JOIN dbo.Users usr 
      ON mem.uid = usr.uid 
    WHERE CONVERT(VARCHAR(10), expiryDate, 105) = 
      CONVERT(VARCHAR(10), (getdate() + 7), 105) 


GO 



GRANT SELECT , UPDATE , INSERT , DELETE ON [dbo].[vwExpiringMemberships] TO public 
GO 
+0

спасибо. очень признателен! –

+0

Помните, что есть «Да, это было полезно» стрелки .... и есть «Mark as Answer». Не уверен, что вы новичок в stackoverflow, но это правильный этикет. Esp «отметьте как ответ», когда на ваш ответ будет дан ответ, поэтому он не будет отображаться на экранах «Фильтр без ответа» (для людей, отвечающих на размещенные вопросы). – granadaCoder

+0

С вашего нового, я думаю, лучше всего предисловие таблиц с именем схемы. Не используйте «Select * from Employee», используйте «Select * from dbo.Employee». Я обновляю код представления в своем ответе. – granadaCoder

0

отрезала это:

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server= (local)\SQL2008;Trusted_Connection=yes;', 
'EXEC getBusinessLineHistory') 

Отсюда: Insert results of a stored procedure into a temporary table

+1

Или вы можете просто «CREATE TABLE # T», а затем «INSERT ... EXEC» без необходимости «OPENROWSET» –

+0

спасибо! Я думаю, что это решит мою проблему. –

+0

Openrowset кажется неправильным способом сделать это. –

0
Insert into YOUR_TABLE exec("spGetMemReminder") 
+0

Я использую sql server 2005. Я создал задание, которое хранит хранимую процедуру каждый день. Этот список затем будет вставлен в другую таблицу, которая отображается при входе в систему. Это позволяет мне видеть пользователей, срок действия которых истекает через 7 дней. Как бы это сделать, используя представление? Я относительно новичок в SQL. Благодаря! –

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