Sql 存储过程中的列名或数值不匹配错误
这是我的存储过程代码。当我用所有需要的参数运行这段代码时,我得到一个错误 提供的值的列名或数目与表定义不匹配 任何人都可以告诉我这个SQL有什么问题吗 注意:我使用的是Microsoft SQL ServerSql 存储过程中的列名或数值不匹配错误,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)
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*
是一个很坏的习惯<代码>插入到而不提供列列表更糟糕。