Sql server 我在存储过程的脚本sql中得到一个返回值错误
我发现“TOP或FETCH子句包含无效值”此错误 " Msg 1014,Niveau 15,État 1,程序dbo.sp_contacts_getcontacts,第24页[第0批零件的位置] TOP或FETCH子句包含无效值。“ 我想使用存储过程获取联系人,这是SP的代码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 =
( @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中选择*。获取联系人(/*您的参数*/)作为联系人