Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 我在存储过程的脚本sql中得到一个返回值错误_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server 我在存储过程的脚本sql中得到一个返回值错误

Sql server 我在存储过程的脚本sql中得到一个返回值错误,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我发现“TOP或FETCH子句包含无效值”此错误 " Msg 1014,Niveau 15,État 1,程序dbo.sp_contacts_getcontacts,第24页[第0批零件的位置] TOP或FETCH子句包含无效值。“ 我想使用存储过程获取联系人,这是SP的代码 ( @Id uniqueidentifier = NULL, @role nvarchar(max) = NULL, @IdCompany uniqueidentifier =

我发现“TOP或FETCH子句包含无效值”此错误

" Msg 1014,Niveau 15,État 1,程序dbo.sp_contacts_getcontacts,第24页[第0批零件的位置] TOP或FETCH子句包含无效值。“

我想使用存储过程获取联系人,这是SP的代码

( @Id     uniqueidentifier  = NULL,
    @role   nvarchar(max)     = NULL,
    @IdCompany    uniqueidentifier  = NULL,
    @Active   bit     = 0, 
    @Page  int    = NULL,
    @PerPage   int  = NULL,


)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON
    -- Insert statements for procedure here
     SELECT * 
     FROM [dbo].[Contacts] 
     LEFT JOIN [dbo].[Companies]    
     ON Contacts.[IdCompany] =  Companies.[IdCompany]
     WHERE
          (@Id is null or @Id = [IdContact])
    AND   (@role is null  or @role=contacts.[Role])
    AND   (@IdCompany  is null or @IdCompany  = [IdCompany])
    AND   (@Active = 0 or @Active = [Active])

    ORDER BY [IdContact] OFFSET ((@Page - 1) * @PerPage) ROWS FETCH NEXT @PerPage ROWS ONLY

END

我可能误解了你的问题。 如果要从该选择中获取结果,则需要一个与要插入的存储过程的输出相匹配的表变量

DECLARE @someTable TABLE(
    /* Whatever the output is of the sproc */
)

INSERT INTO @someTable
EXEC @return_value = dbo.nameOfYourSproc
您还可以尝试根据结果创建临时表

INSERT INTO #someTable
EXEC @return_value = dbo.nameOfYourSproc

虽然,我的建议是将存储过程转换为表值函数。

代码是正确的,但我没有以这种方式为page和perpage插入值,因为它显示错误“FETCH…”

声明和初始化的
@page
@perpage
在哪里?不要发布代码图像或错误消息。粘贴文章中的文本。对不起,我忘记复制它们了。您有页面和每页的参数,它们都是可选参数,可以为空。如果其中任何一个为NULL,则代码将失败,因为您随后说的偏移量为NULL是没有意义的。您应该至少使用默认值,以便进行有效查询。另外,不要使用sp_uu前缀…谢谢你的回答..但是我已经有了一个完整的联系人表,我只想获取这些联系人。表值函数的内部代码与存储过程的内部代码相同。你可以把它叫做桌子<代码>从dbo中选择*。获取联系人(/*您的参数*/)作为联系人