【问题标题】:Stored procedure not inserting into a table when called from a view - SQL Server 2014从视图调用时未插入表的存储过程 - 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 视图的限制。
  • 只要存储过程返回记录集,就可以在视图中执行存储过程。

标签: sql sql-server stored-procedures views


【解决方案1】:

尝试运行这个看看有什么返回:

SELECT Orders.InvoiceNo FROM Orders
PostStatus = 2
AND VoidFlag = 0
AND LastModDate > ReplicationDateTime

【讨论】:

  • 如果没有返回,那么您必须先修改该插入查询,然后才能让 sp 插入一些记录
  • Long - 是的,它确实返回记录......并且视图返回记录。
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多