从视图调用时未插入表的存储过程 - SQL Server 2014
Posted
技术标签:
【中文标题】从视图调用时未插入表的存储过程 - SQL Server 2014【英文标题】:Stored procedure not inserting into a table when called from a view - SQL Server 2014 【发布时间】:2016-12-20 20:49:44 【问题描述】:存储过程:
ALTER PROCEDURE EXPORT_SALES
AS
-- insert invoice numbers into zInvoices table for use later
BEGIN
SET NOCOUNT ON;
INSERT INTO zInvoices
SELECT
Orders.InvoiceNo
FROM
Orders
WHERE
(Orders.PostStatus = 2
AND Orders.VoidFlag = 0
AND Orders.LastModDate > Orders.ReplicationDateTime);
-- get recordset of data to return to view
SELECT NewId() AS IRN, CompanyName
FROM Companies;
END
查看:
ALTER VIEW mvuEXPORT_SALES
AS
SELECT *
FROM openquery([local], 'SET FMTONLY OFF; SET NOCOUNT ON; EXEC DBName.user.EXPORT_SALES');
GO
如果我运行存储过程,它会插入 zInvoices 表并返回带有 Id 和 CompanyName 的记录集。当我从视图中运行它时;它返回带有 Id 和 CompanyName 的记录集...但它不会插入到 zInvoices 表中。
任何建议将不胜感激。
【问题讨论】:
视图定义只能有Single Select
语句。您无法在视图检查 MSDN 中执行过程以了解更多 SQL Server 视图的限制。
只要存储过程返回记录集,就可以在视图中执行存储过程。
【参考方案1】:
尝试运行这个看看有什么返回:
SELECT Orders.InvoiceNo FROM Orders
PostStatus = 2
AND VoidFlag = 0
AND LastModDate > ReplicationDateTime
【讨论】:
如果没有返回,那么您必须先修改该插入查询,然后才能让 sp 插入一些记录 Long - 是的,它确实返回记录......并且视图返回记录。以上是关于从视图调用时未插入表的存储过程 - SQL Server 2014的主要内容,如果未能解决你的问题,请参考以下文章
sql server中怎么把一个表的数据全部插入到另一个表,每次1000条的插入,一次执行,不要在存储过程里改的