2014-09-02 207 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]+ ')'; 

编辑:

对于日期,这应该工作:

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

不需要铸造/转换吗? – 2014-09-02 11:37:44

+0

也需要转换日期。你能告诉我如何转换? – user3859666 2014-09-02 11:44:16

+0

谢谢......但第二个(把日期值放在单引号中)不起作用 – user3859666 2014-09-02 12:00:58

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

请说明您的代码的作用以及它如何回答问题。如果你得到一个代码片段作为答案,你可能不知道如何处理它。回答应该给OP和未来访问者指导如何调试和解决他们的问题。指出你的代码背后的想法,对于理解这个问题以及应用或修改你的解决方案有很大的帮助。 – Palec 2014-09-02 12:00:36

相关问题