Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程未返回数据的SQL Server openquery()_Sql_Sql Server - Fatal编程技术网

存储过程未返回数据的SQL Server openquery()

存储过程未返回数据的SQL Server openquery(),sql,sql-server,Sql,Sql Server,我有一个存储过程,返回一些数据(只有一行日期)。当我用exec调用这个proc时,我得到了返回的数据,一切都很好 我想通过视图访问它,所以我使用openquery()来实现这一点。但是,当我这样做时,我会收到错误消息: Cannot process the object "exec GetDates". The OLE DB provider "SQLNCLI11" for linked server "LOCAL" indicates that either the object has no

我有一个存储过程,返回一些数据(只有一行日期)。当我用exec调用这个proc时,我得到了返回的数据,一切都很好

我想通过视图访问它,所以我使用openquery()来实现这一点。但是,当我这样做时,我会收到错误消息:

Cannot process the object "exec GetDates". The OLE DB provider "SQLNCLI11" for linked server "LOCAL" indicates that either the object has no columns or the current user does not have permissions on that object.
我注意到是临时表上的insert语句。如果我把它注释掉,那么我就不会得到这个错误。所以我假设这是错误消息的权限端。这是一个临时表,当我可以插入到数据库中的任何实际表中时,我怎么可能没有插入该表的权限

ALTER PROCEDURE [dbo].[GetDates]
AS
    DECLARE @capacityTable TABLE (dt datetime)
    DECLARE @dt datetime
    DECLARE curDates CURSOR FOR SELECT dt from calendar;

    -- loop over all dates we care about
    OPEN curDates;
    FETCH NEXT FROM curDates INTO @dt;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO @capacityTable (dt)
        VALUES(@dt)

        FETCH NEXT FROM curDates INTO @dt;
    END;
    CLOSE curDates;
    DEALLOCATE curDates;

    -- return the temp table results
    SELECT dt from @capacityTable;
RETURN

alter view GetDates_vw
as
select * from openquery(LOCAL, 'exec GetDates')

如果将SET NOCOUNT设置为ON,则在openquery()函数中的EXEC之前显示;它起作用了。不知道为什么,但确实如此。

请注意,这只是我实际需要的一个构建块,所以我知道这个示例没有意义。由于我是T-SQL的新手,所以我将添加到这一点上,并在前进的过程中解决问题。请尝试完全限定您的对象-db.schema.object如何查找临时表?我尝试了db.schema@capacityTable,但在编译表变量(不是临时表)不需要的程序时,它给出了语法错误。对日历、GetDates和GetDates执行此操作。我不确定这会解决问题,但这是一个正确的起点。似乎没有解决问题。奇怪的是运行这个工具:exec dbo.GetCargillCapacity,但我想作为一个视图来运行它。这是因为“SET Nount ON”(设置Nount ON)抑制了正常情况下出于调试目的放入SP主体的跟踪线,并且只处理查询结果。