在 SQL Server 存储过程中将 varchar 转换为 int 时出错

     2023-04-18     227

关键词:

【中文标题】在 SQL Server 存储过程中将 varchar 转换为 int 时出错【英文标题】:Error converting varchar to int in SQL Server stored procedure 【发布时间】:2013-10-31 14:22:05 【问题描述】:

以下是我的存储过程。我收到一个错误,但我不明白到底是什么问题

CREATE Proc [dbo].[sp_Product_details_for_Productcategory_as_per_productcategoryID]                  
   @ProductCategoryId int,                
   @PageIndex INT                 
   ,@PageSize INT                 
   ,@PageCount INT OUTPUT         
   ,@ProductSearch nvarchar(Max)                      
as                      
BEGIN             
  declare @Criteria varchar(4000)       

  set @Criteria = (select replace(@ProductSearch,'(','('''))            
set @Criteria = (select REPLACE(@Criteria,',',''','''))            
set @Criteria = (select REPLACE(@Criteria,')',''')'))          

declare @sql int        

SET NOCOUNT ON;                
        select @sql = ' SELECT ROW_NUMBER() OVER                
            (                
                  ORDER BY PM.ProductMainPkId ASC                
            )AS RowNumber ,          
            PM.ProductMainPkId ProductMainPkId               
      ,PM.Title,                      
    PS.ProductSubCategory ProductSubCategory,                      
   PM.ProductSubCategoryFkId ,                     
  PP.MarketValue,                      
  PP.DiscountPrice,                      
  PID.Path1Thumb                  

    INTO #Results                
       from ProductMain_Details PM                      
  Left join ProductPrice_Details PP on   PM.ProductMainPkId = PP.ProductMain_FkId                      
  Left join ProductImage_Details PID on PM.ProductMainPkId = PID.ProductMain_FkId                      
  Left Join ProductSubCategory_Master PS on  PM.ProductSubCategoryFkId = PS.ProductSubCategoryPkId                      
where                     
--PS.ProductSubCategorypkId = 216                   
PS.ProductSubCategorypkId =  '+ CAST((@ProductCategoryId) as varchar(5) ) +'  and                  
PM.Active = 1                      
 and PM.Deleted = 0'      
 +@Criteria+'                         

      DECLARE @RecordCount INT                
      SELECT @RecordCount = COUNT(*) FROM #Results                

      SET @PageCount = CEILING(CAST(@RecordCount AS DECIMAL(10, 2)) / CAST(@PageSize AS DECIMAL(10, 2)))                
      PRINT       @PageCount                

      SELECT * FROM #Results                
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1                

      DROP TABLE #Results'        
  EXEC    (@sql)      

-- SET NOCOUNT ON;                
--      SELECT ROW_NUMBER() OVER                
--            (                
--                  ORDER BY PM.ProductMainPkId ASC                
--            )AS RowNumber ,          
--            PM.ProductMainPkId ProductMainPkId               
--      ,PM.Title,                      
--    PS.ProductSubCategory ProductSubCategory,                      
--   PM.ProductSubCategoryFkId ,                     
--  PP.MarketValue,                      
--  PP.DiscountPrice,                      
--  PID.Path1Thumb                  

--    INTO #Results                
--       from ProductMain_Details PM                      
--  Left join ProductPrice_Details PP on   PM.ProductMainPkId = PP.ProductMain_FkId                      
--  Left join ProductImage_Details PID on PM.ProductMainPkId = PID.ProductMain_FkId                      
--  Left Join ProductSubCategory_Master PS on  PM.ProductSubCategoryFkId = PS.ProductSubCategoryPkId                      
--where                     
----PS.ProductSubCategorypkId = 216                   
--PS.ProductSubCategorypkId = @ProductCategoryId and                  
--PM.Active = 1                      
-- and PM.Deleted = 0                         

--      DECLARE @RecordCount INT                
--      SELECT @RecordCount = COUNT(*) FROM #Results                

--      SET @PageCount = CEILING(CAST(@RecordCount AS DECIMAL(10, 2)) / CAST(@PageSize AS DECIMAL(10, 2)))                
--      PRINT       @PageCount                

--      SELECT * FROM #Results                
--      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1                

--      DROP TABLE #Results                
END             

错误:

消息 245,级别 16,状态 1,过程 sp_Product_details_for_Productcategory_as_per_productcategoryID,第 21 行 转换 varchar 值时转换失败 'SELECT ROW_NUMBER() OVER ( 由 PM.ProductMainPkId ASC 订购 )AS 行号 , PM.ProductMainPkId ProductMainPkId ,PM.Title, PS.ProductSubCategory ProductSubCategory, PM.ProductSubCategoryFkId , PP.MarketValue, PP.DiscountPrice, PID.Path1Thumb

    INTO #Results              
       from ProductMain_Details PM                    
  Left join ProductPrice_Details PP on   PM.ProductMainPkId = PP.ProductMain_FkId                    
  Left join ProductImage_Details PID on PM.ProductMainPkId = PID.ProductMain_FkId                    
  Left Join ProductSubCategory_Master PS on  PM.ProductSubCategoryFkId = PS.ProductSubCategoryPkId                    
where                   
--PS.ProductSubCategorypkId = 216                 
PS.ProductSubCategorypkId =  1  and                
PM.Active = 1                    
 and PM.Deleted = 0                       

      DECLARE @RecordCount INT              
      SELECT @RecordCount = COUNT(*) FROM #Results              

      SET @PageCount = CEILING(CAST(@RecordCount AS DECIMAL(10, 2)) / CAST(@PageSize AS DECIMAL(10, 2)))              
      PRINT       @PageCount              

      SELECT * FROM #Results              
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1              

      DROP TABLE #Results' to data type int.

【问题讨论】:

【参考方案1】:

您将@sql 变量声明为INT,而它应该是合适大小的(n)varchar,例如varchar(max)nvarchar(max),因为您需要该变量来保存您传递给@ 的字符串987654325@.

declare @sql int   

应该是

declare @sql varchar(max)   

【讨论】:

在 SQL Server 存储过程中将 varchar 转换为 int 时出错

】在SQLServer存储过程中将varchar转换为int时出错【英文标题】:ErrorconvertingvarchartointinSQLServerstoredprocedure【发布时间】:2013-10-3114:22:05【问题描述】:以下是我的存储过程。我收到一个错误,但我不明白到底是什么问题CREATEProc[dbo]... 查看详情

在 SQL Server 存储过程中查找表名的列名作为保留关键字

】在SQLServer存储过程中查找表名的列名作为保留关键字【英文标题】:FindColumnNamesorTableNamesasreservedkeywordinSQLServerstoredprocedure【发布时间】:2016-07-0512:47:41【问题描述】:我的数据库中有大量存储过程。所有这些都旨在返回结果... 查看详情

如何在 sql server 2008 中将日期与 GETDATE() 进行比较

】如何在sqlserver2008中将日期与GETDATE()进行比较【英文标题】:howtocomparedatewithGETDATE()insqlserver2008【发布时间】:2018-05-2208:06:41【问题描述】:我有一个存储过程,用于将某种信息插入到表\'demotable\'中,因为我有一个字段loginTime... 查看详情

在 SSIS 中执行 SQL 任务中将表类型输入参数传递给存储过程

】在SSIS中执行SQL任务中将表类型输入参数传递给存储过程【英文标题】:PassingTableTypeInputParameterToStoredProcedureinExecuteSQLTaskinSSIS【发布时间】:2016-05-1314:01:38【问题描述】:我正在尝试从SSIS中的执行SQL任务调用存储过程。存储过... 查看详情

在 PL/SQL 存储过程中将表作为参数传递

】在PL/SQL存储过程中将表作为参数传递【英文标题】:PasstableasparameterinPL/SQLstoredprocedure【发布时间】:2016-12-0616:10:44【问题描述】:请原谅任何措辞不佳的问题,因为我对PL/SQL和Oracle的经验很少。但是,我目前不知道如何将表... 查看详情

如何在 sql server 2008r2 中将行名更改为列名

】如何在sqlserver2008r2中将行名更改为列名【英文标题】:HowtochangeRownameintoColumnnameinsqlserver2008r2【发布时间】:2018-10-2209:40:54【问题描述】:我在asp.net中使用存储过程作为绑定制作XtraCharts线图(XY图)时遇到了麻烦。我想通过R250... 查看详情

VBScript - 在 SQL Server 中将 SHA1 存储为数字或二进制值

】VBScript-在SQLServer中将SHA1存储为数字或二进制值【英文标题】:VBScript-StoringSHA1asNumericorBinaryValueinSQLServer【发布时间】:2011-04-2016:20:36【问题描述】:我目前在SQLServer中将我的SHA1值存储为char(40)。我的印象是,我可以通过将此字... 查看详情

在 Oracle SQL 错误中将日期传递给存储过程:ORA-01858

】在OracleSQL错误中将日期传递给存储过程:ORA-01858【英文标题】:PassingdatetoStoredProcedureinOracleSQLerror:ORA-01858【发布时间】:2020-09-1708:41:33【问题描述】:我知道这个问题之前已经回答过了,我已经尝试了其中给出的解决方案,但... 查看详情

在 PL/SQL 存储过程中将多个变量传递给 WHERE 条件

】在PL/SQL存储过程中将多个变量传递给WHERE条件【英文标题】:PassingmultiplevariablesintoWHEREconditioninPL/SQLStoredProcedure【发布时间】:2012-07-0312:32:15【问题描述】:在传递参数时执行此代码块时出现问题。参数rf是要输入到WHERE子句中... 查看详情

如何在 SQL Server 中检查调用存储过程

】如何在SQLServer中检查调用存储过程【英文标题】:HowtoCheckthecallingstoredprocedureinSQLServer【发布时间】:2021-01-0316:30:18【问题描述】:我有一个存储过程名称示例“mySp”,我想知道谁调用了这个存储过程,我的意思是这个存储过... 查看详情

如果存储过程失败,则在执行 SQL 任务中将输出变量值获取到 ssis 变量中

】如果存储过程失败,则在执行SQL任务中将输出变量值获取到ssis变量中【英文标题】:IfstoredprocedurefailedthenGetoutputvariablesvaluesintossisvariablesinExecuteSQLTask【发布时间】:2020-07-2914:11:24【问题描述】:我正在尝试从SP获取输出消息到... 查看详情

如何在 SQL Server 数据库中将 Azure 存储用于 elmah 日志而不是 elmah 日志

】如何在SQLServer数据库中将Azure存储用于elmah日志而不是elmah日志【英文标题】:HowtouseAzurestorageforelmahlogsinsteadofelmahlogsinSQLServerdatabase【发布时间】:2018-12-1908:57:50【问题描述】:目前在我的项目中,我在SQLServer的单独表中使用elm... 查看详情

如何在 SQL Developer 中执行 SQL Server 存储过程?

】如何在SQLDeveloper中执行SQLServer存储过程?【英文标题】:HowtoExecuteSQLServerStoredProcedureinSQLDeveloper?【发布时间】:2011-05-0709:56:15【问题描述】:我获得了一个SQLServer数据库的用户帐户,该用户帐户仅具有执行存储过程的权限。我... 查看详情

如何在sql server的另一个存储过程中执行存储过程

】如何在sqlserver的另一个存储过程中执行存储过程【英文标题】:Howtoexecutestoredprocedureinanotherstoredprocedureinsqlserver【发布时间】:2013-04-2509:27:04【问题描述】:我正在使用sqlserver2008。我有一个存储过程,我正在其中执行另一个usp... 查看详情

在存储过程 sql server 2005 中使用函数调用?

】在存储过程sqlserver2005中使用函数调用?【英文标题】:Useoffunctioncallsinstoredproceduresqlserver2005?【发布时间】:2011-09-2119:25:34【问题描述】:在存储过程的where子句中使用函数调用会降低sqlserver2005的性能?SELECT*FROMMemberMWHERELOWER(db... 查看详情

在 SQL Server 上查询存储过程的内容

】在SQLServer上查询存储过程的内容【英文标题】:QuerythecontentsofstoredproceduresonSQLServer【发布时间】:2011-12-0222:36:40【问题描述】:我正在探索一个遗留数据库系统,但对其内部结构知之甚少。我想找到调用另一个存储过程A的所... 查看详情

如何使用 SQL Server 将存储过程的结果存储在变量中

】如何使用SQLServer将存储过程的结果存储在变量中【英文标题】:HowtostoreresultofstoredprocedureinavariableusingSQLServer【发布时间】:2015-07-1507:08:50【问题描述】:我正在处理SQL查询,我必须将存储过程的结果存储到字符串类型变量中... 查看详情

如何在 Microsoft SQL Server 2017 上调试存储过程?

】如何在MicrosoftSQLServer2017上调试存储过程?【英文标题】:HowtodebugstoredprocedureonMicrosoftSQLServer2017?【发布时间】:2019-05-0421:19:12【问题描述】:我需要使用存储在此服务器中的数据在本地SQLServer上调试存储过程。我的设备上有:... 查看详情