2014-09-02 4 views
0

Я получаю ошибку при попытке выполнить SP. Просьба помочьНе удалось преобразовать при преобразовании значения varchar в int

Conversion failed when converting the varchar value 'INSERT INTO INVESTOR_ACCOUNT  VALUES('253361',' to data type int. 

Это мой SP

ALTER Procedure [dbo].[RM_INVESTOR_ACCOUNTS_INSERT] 
@AccountNo varchar(20), @InvestorID integer, @SaleDate datetime 
As 
Begin 
declare @query nvarchar(max) 
set @query ='INSERT INTO INVESTOR_ACCOUNT VALUES('''+ @AccountNo+ ''','[email protected]+','[email protected]+ ')' 
print @query 
End 

Выполненный с командой ниже

exec RM_INVESTOR_ACCOUNTS_INSERT '253361',1,'2003-12-24 00:00:00.000' 

ответ

0

Оператор + неоднозначно. Это может означать либо добавление чисел, либо конкатенацию строк. У вас есть цифры, смешанные, поэтому они интерпретируются как дополнение.

Итак, сделайте явное преобразование. Что-то вроде:

set @query ='INSERT INTO INVESTOR_ACCOUNT 
    VALUES('''+ cast(@AccountNo as varchar(255)) + ''', '+cast(@InvestorID as varchar(255)) +','[email protected]+ ')'; 

EDIT:

На дату, это должно работать:

set @query ='INSERT INTO INVESTOR_ACCOUNT 
    VALUES('''+ cast(@AccountNo as varchar(255)) + ''', '+cast(@InvestorID as varchar(255)) +', ''' + @SaleDate + ''')'; 

Он будет использовать форматы по умолчанию. Ключ помещает значения в одинарные кавычки в строку.

Вы можете быть явным с форматом, выполнив:

set @query ='INSERT INTO INVESTOR_ACCOUNT 
    VALUES('''+ cast(@AccountNo as varchar(255)) + ''', '+cast(@InvestorID as varchar(255)) +', ''' + convert(varchar(10), @SaleDate, 121) + ''')'; 

Это использует YYYY-MM-DD формат, который SQL Server в целом понимает.

+0

Не нужно ли выполнять листинг и конвертирование? –

+0

нужно также указать дату. Можете ли вы рассказать мне, как конвертировать? – user3859666

+0

Спасибо ... Но второй (ввод значений даты в одинарные кавычки) не работает – user3859666

0
set @query ='INSERT INTO INVESTOR_ACCOUNT VALUES('''+ @AccountNo+ ''','+CONVERT(VARCHAR,@InvestorID)+',CONVERT(DATETIME,'''+CONVERT(VARDHAR,@SaleDate,113)+ '',113')' 
+1

Пожалуйста, включите объяснение, что делает ваш код и как он отвечает на вопрос. Если вы получите фрагмент кода в качестве ответа, вы можете не знать, что с ним делать. Ответ должен дать руководству OP и будущих посетителей о том, как отлаживать и исправлять свои проблемы. Указывая, что представляет собой идея вашего кода, очень помогает в понимании проблемы и применении или изменении вашего решения. – Palec

Смежные вопросы