Я видел этот вопрос во всех stackoverflow, но кажется, что существует множество решений, адаптированных к ситуации. Кажется, у меня есть уникальная ситуация, насколько я могу судить. Я бегу это SQL заявлениеПроблема преобразования varchar в INT на сервере sql
use IST_CA_2_Batch_Conversion
GO
--T-SQL script to populate the Match type column
declare @MatchType varchar(16),
@PK varchar(500),
@CAReturnCode VARCHAR(255),
@CAErrorCodes VARCHAR(255)
declare cursor1 cursor fast_forward for
select
["Ref#"],
["Return Code"],
["Error Codes"]
from CACodes2MatchType
open cursor1
fetch next from cursor1 into @PK,@CAReturnCode,@CAErrorCodes
while @@fetch_status = 0
begin
set @MatchType = dbo.GetMatchType(@CAReturnCode,@CAErrorCodes)
update CACodes2MatchType
set [Match Type] = @MatchType
where ["Ref#"] = @PK
fetch next from cursor1 into @PK,@CAReturnCode,@CAErrorCodes
end
close cursor1
deallocate cursor1
Он провалится в
set @MatchType = dbo.GetMatchType(@CAReturnCode,@CAErrorCodes)
Вот начало код функции GetMatchType:
-- Batch submitted through debugger:
SQLQuery14.sql|6|0|C:\Users\b01642a\AppData\Local\Temp\~vs1C8E.sql
CREATE FUNCTION [dbo].[GetMatchType](@CAReturnCode VARCHAR(255), @CAErrorCodes
VARCHAR(255))
RETURNS VARCHAR(16)
BEGIN
DECLARE @MatchType VARCHAR(16);
DECLARE @errorCodes TABLE(Pos INT, Code CHAR(2));
DECLARE @country INT; -- 1 is US, 2 is Canada
DECLARE @numMinorChanges INT;
DECLARE @numMajorChanges INT;
DECLARE @numSingleCodes INT;
DECLARE @returnCode INT;
DECLARE @verified VARCHAR(16);
DECLARE @goodFull VARCHAR(16);
DECLARE @tentativeFull VARCHAR(16);
DECLARE @poorFull VARCHAR(16);
DECLARE @multipleMatch VARCHAR(16);
DECLARE @unmatched VARCHAR(16);
SET @verified = 'Verified';
SET @goodFull = 'Good Full';
SET @tentativeFull = 'Tentative Full';
SET @poorFull = 'Poor Full';
SET @multipleMatch = 'Multiple Match';
SET @unmatched = 'Unmatched';
SET @returnCode = CAST(@CAReturnCode AS INT);
Я получаю сообщение об ошибке: Msg 245, Уровень 16, состояние 1, строка 21 Ошибка преобразования при преобразовании значения varchar '"1"' в тип данных int.
Эта ошибка происходит в последней строке сегмента кода я показал:
SET @returnCode = CAST(@CAReturnCode AS INT);
Это код, который был написан коллегой и якобы работал на него. Я должен был устранить некоторые ошибки, но я не могу отлаживать это. Я понимаю, что многие люди создадут функцию dbo.split? Я не знаю, поможет ли этот вариант мне в этом сценарии. Я попытался установить @returnCode на varchar и избавиться от CAST на @CAReturnCode. В результате отладчик пропустит эту строку, но вызывает проблемы с остальной частью кода. Я предполагаю, что есть проблема с тем, как я использую @CAReturnCode? Любая помощь приветствуется.
CAST ANSI, в то время как Convert является SQL-специфическим, вы можете попробовать использовать CONVERT там, так как он немного более интеллектуальный, как он хочет преобразовать значение. –
Я дал это выстрел SET @returnCode = CONVERT (INT, @ CAReturnCode); и по-прежнему получают ту же ошибку – TaylorSmolik