2014-09-02 420 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

相關問題