从视图调用时未插入表的存储过程 - 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条的插入,一次执行,不要在存储过程里改的

SQL/C#:DataTable 到存储过程(从用户定义的表类型插入)- 转换错误

用ASP调用SQL Server的视图和存储过程

sql存储过程从一张表中查询到的值作为另一张表的新的字段

SQL-视图与存储过程

从 PHP PDO 调用 SQL 存储过程