将varchar值转换为int时转换失败

时间:2014-09-02 11:34:50

标签: sql sql-server-2008 stored-procedures

尝试执行SP时出错。请帮忙

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+ ''','+@InvestorID+','+@SaleDate+ ')'
print @query
End

执行以下命令

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

运算符+含糊不清。它可以表示添加数字或字符串连接。你有数字混合,所以它被解释为加法。

所以,做显式转换。类似的东西:

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)) +', ''' + @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通常理解这种格式。