Stored procedures 如何保持TBLPOURCHASE和tblProductStock表不下降。(我需要保持表和值永久不变,不掉落)

Stored procedures 如何保持TBLPOURCHASE和tblProductStock表不下降。(我需要保持表和值永久不变,不掉落),stored-procedures,sql-server-2012,Stored Procedures,Sql Server 2012,如何在不删除TBLPOURCHASE和tblProductStock的情况下更改此存储过程。 当我用这个存储过程运行我的程序时,在添加新的记录表之后,数据将被删除。我想保护所有的表和数据。请帮我解决这个问题 索引视图 基于的全新解决方案是可能的 索引视图是具有聚集索引的视图,数据实际上存储在磁盘上 据我所知,您试图在TBLPProduct中保存每个产品项的购买金额。我假设ItemCode是tblProduct的主键,ItemName也在这里定义,我们不能在索引视图中使用MAX。因此,我们可以定义

如何在不删除TBLPOURCHASE和tblProductStock的情况下更改此存储过程。 当我用这个存储过程运行我的程序时,在添加新的记录表之后,数据将被删除。我想保护所有的表和数据。请帮我解决这个问题

索引视图 基于的全新解决方案是可能的

索引视图是具有聚集索引的视图,数据实际上存储在磁盘上

据我所知,您试图在TBLPProduct中保存每个产品项的购买金额。我假设ItemCode是tblProduct的主键,ItemName也在这里定义,我们不能在索引视图中使用MAX。因此,我们可以定义如下视图:

创建视图dbo.vw 使用SCHEMABINDING-必须绑定到架构,我们不能在创建后更改基础列 像 选择 项目代码, 采购的总数量, COUNT_BIG*CountPurchases-如果我们分组,还必须有COUNT,以便可以维护行 FROM dbo.tblpourchase-必须使用由两部分组成的名称 按项目代码分组; 去 然后,我们可以在它上面创建一个聚集索引,将它持久化到磁盘上。每当对基表进行更新时,SQL Server都会维护索引。如果通过计数为0标识的分组中没有更多行,则删除该行:

在dbo.vwttalpurchases ItemCode上创建唯一的聚集索引PK_vwttalpurchases; 去 现在,如果我们想查询它,我们可以将此视图左连接到tblProducts left join,因为可能没有购买:

选择 p、 项目代码, p、 项目名称, ISNULLtp.QuantityPurchased,0 QuantityPurchased, ISNULLtp.CountPurchases,0 CountPurchases 来自tblProducts p 使用tp.ItemCode=p.ItemCode上的NOEXPAND左连接到tp; 我们可以将其定义为一个视图,也不是一个索引视图,而是一个标准视图,这样定义就可以在任何地方使用

关于NOEXPAND的说明: 如果您不在SQL Server Enterprise或Developer Edition上,则必须将提示与NOEXPAND一起使用,以强制它使用索引,否则它将查询基本TBL采购。即使在这些版本中,最好使用NOEXPAND


请参阅Paul White的文章。

您打算如何处理该存储过程?你不想放弃什么?临时桌?所以把它放在一个标准的表格里。看起来你可能想试试。问题应该是独立的。如果相关问题中有信息,请将其包含在本问题中并引用其来源。@Charlieface您能告诉我怎么做吗that@Charlieface你知道重写这段代码吗。我不想两张桌子都掉了。非常感谢你的帮助。但是当我执行这个命令行时,在dbo.vw.ItemCode上创建唯一的聚集索引;GO它在关键字“ON”附近显示错误语法。你能告诉我如何解决这个错误吗。谢谢。很抱歉,忘记给它命名了,请参阅dbo.vwttalpurchases ItemCode上的编辑创建唯一聚集索引PK_vwttalpurchases;那很好。我有一些问题。你能告诉我你的电子邮件地址吗。我想解决这个问题。我试着在4天内解决这个问题。还没有完成。在我使用存储过程将数据从TBLPOURCHASE传递到tblProductStock表之前,请帮助我。但在那个时候记录和表格被删除了。因为临时表。但是现在我想用另一种方法将数据传递到tblProductStock表。您能告诉我如何在不复制recordUse触发器的情况下将数据从tblPurchase表传递到tblProductStock表吗?但是我的答案对你没有帮助,你需要通过什么?