SQL Server openquery(),存储过程不返回数据

时间:2014-05-29 15:30:52

标签: 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 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')

1 个答案:

答案 0 :(得分:6)

如果你将SET NOCOUNT置于ON状态,它就像在openquery()函数中的EXEC之前一样;有用。不确定为什么,但确实如此。