2013-05-21 253 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

请记住,有“是的,这是有帮助的”箭头......并且有一个“标记为答案”。不确定你是否是新手,但这是合适的礼仪。当您的答案被回答时,请特别注意“标记为答案”,因此它不会显示在“通过未答复过滤”屏幕中(针对回复发布的问题的人)。 – granadaCoder

+0

既然你是新手,我认为最好的做法是在模式名称前加上你的表格。不要使用“从雇员中选择*”,请使用“从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比较陌生。谢谢! –