簡體   English   中英

將 varchar 值“43302001-8”轉換為數據類型 int 時轉換失敗

[英]Conversion failed when converting the varchar value '43302001-8' to data type int

當我嘗試執行以下操作時:

DECLARE @sqlText nvarchar(1000); 

SET @sqlText = N'SELECT TOP ' + CAST((:intValue) AS VARCHAR(20)) +  't_stamp, PART_NUM, ' + :Column  + ' FROM dbo.press_7_recipes_log WHERE PART_NUM = ' + CAST(:text AS VARCHAR(20))
Exec (@sqlText)

我得到以下信息

錯誤:com.microsoft.sqlserver.jdbc.SQLServerException:將 varchar 值“43302001-8”轉換為數據類型 int 時轉換失敗。

任何幫助將不勝感激,不確定這里還需要什么。

:intValue 是 int4 類型
:text 是字符串類型
:Column 是字符串類型(這是從數據庫中提取指定的列以及為什么我認為這需要是一個動態查詢)

多次嘗試用谷歌搜索問題並更改命令,結果相同。 如果我將 where 中的 PART_NUM 更改為類型為 int 的列,則代碼可以正常工作,但任何與字符串相關的列都不會。

問題是,在您准備好之后,查詢變為:SELECT TOP 666 t_stamp, PART_NUM, ANOTHER_COLUMN FROM dbo.press_7_recipes_log WHERE PART_NUM = 43302001-8

由於 43302001-8 是一個 INTEGER=43301993,SQL 服務器將 PART_NUM 列轉換為 INT,這不起作用,因為它可能包含非整數。

您需要將動態查詢更改為我認為的這個:

DECLARE @sqlText nvarchar(1000); 

SET @sqlText = N'SELECT TOP ' + CAST((:intValue) AS VARCHAR(20)) +  't_stamp, PART_NUM, ' + :Column  + ' FROM dbo.press_7_recipes_log WHERE PART_NUM = ''' + REPLACE(CAST(:text AS VARCHAR(20)), '''', '''''') + ''''
Exec (@sqlText)

這會將 WHERE 更改為:PART_NUM = '43302001-8'

但正如其他人注意到的那樣,您在這里有很多 SQL 注射的可能性。 所以我可能會擺脫這段代碼並重寫它以避免動態 SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM