Sql 存储过程中的列名或数值不匹配错误

Sql 存储过程中的列名或数值不匹配错误,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,这是我的存储过程代码。当我用所有需要的参数运行这段代码时,我得到一个错误 提供的值的列名或数目与表定义不匹配 任何人都可以告诉我这个SQL有什么问题吗 注意:我使用的是Microsoft SQL Server USE [TestDataBase] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetProductsByKeyword] @Keyword NVARCHAR(255)

这是我的存储过程代码。当我用所有需要的参数运行这段代码时,我得到一个错误

提供的值的列名或数目与表定义不匹配

任何人都可以告诉我这个SQL有什么问题吗

注意:我使用的是Microsoft SQL Server

USE [TestDataBase]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetProductsByKeyword] 
    @Keyword NVARCHAR(255) = NULL,
    @MinPrice FLOAT = NULL,
    @MaxPrice FLOAT = NULL,
    @MaxNumberOfSales FLOAT = NULL,
    @MinNumberOfSales FLOAT = NULL
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ItemsTable TABLE (title NVARCHAR(255))

    DECLARE @Query NVARCHAR(MAX)

    SET @Query='select top 500 * from Products where ID in (SELECT TOP 10000 CAST(KEY_TBL.[KEY] AS BIGINT) FROM CONTAINSTABLE (Products, Title, '+char(39)+@Keyword++char(39)+') AS KEY_TBL ORDER BY RANK DESC)'

    PRINT @Query

    INSERT INTO @ItemsTable 
        EXEC sp_Executesql @Query


    SELECT * FROM @ItemsTable           

    SET NOCOUNT OFF;
END;

“select top 500*…”查询返回的列数似乎超过了表变量所能处理的列数。将*更改为一列,或更改表格变量定义以覆盖查询的输出

您的“select top 500*…”查询返回的列数似乎超出了表格变量的处理能力。要么将*更改为一列,要么更改表变量定义以覆盖查询的输出

似乎您正在通过select*from…选择更多列。。。。而不是只从动态查询中选择标题。为什么在这里使用动态sql?这使得它毫无理由地容易受到sql注入的攻击。至于错误……再清楚不过了。您正试图将select*from Products插入到一个具有单列的表中。使用TOP而不带顺序意味着您无法确保返回哪些行。
SELECT*
是一个很坏的习惯<代码>插入到而不提供列列表更糟糕。似乎您正在通过选择*从…选择更多列。。。。而不是只从动态查询中选择标题。为什么在这里使用动态sql?这使得它毫无理由地容易受到sql注入的攻击。至于错误……再清楚不过了。您正试图将select*from Products插入到一个具有单列的表中。使用TOP而不带顺序意味着您无法确保返回哪些行。
SELECT*
是一个很坏的习惯<代码>插入到而不提供列列表更糟糕。