2014-03-25 360 views
0

我想創建一個獨特的價值將會保存當前的ID和當前的日期。 @QuoteNumber是我想要創建的唯一字段。將日期轉換爲nvarchar?

到目前爲止,我認爲正確的軌道上,但即時通訊試圖將日期添加到我的nvarchar的時候我發現了一個錯誤。

DECLARE @QuoteNumber nvarchar(50) 
DECLARE @Date varchar(10) 
SELECT @Date = (LEFT(CONVERT(VARCHAR, GETDATE(), 120), 10)) 
SET @QuoteNumber = 'QU-' + @Date + '-' + SCOPE_IDENTITY() 

錯誤:

Error converting data type varchar to numeric.

編輯


iv,也試過:

SET @Date = CONVERT(varchar(10), GETDATE(), 20) 
+1

您應該爲正在使用的數據庫添加標籤。 'oracle','sqlserver','mysql'等... –

+0

@ MarkJ.Bobak謝謝,還好。 – Pomster

+1

@Pomster:您需要添加'轉換(VARCHAR,SCOPE_IDENTITY())' –

回答

2
DECLARE @QuoteNumber nvarchar(50) 
DECLARE @Date varchar(10) 
SELECT @Date = CONVERT(VARCHAR(10),GETDATE(),121) 
SET @QuoteNumber = 'QU-' + @Date + '-' + CAST(SCOPE_IDENTITY() AS VARCHAR(10)) 

它不是迄今爲止,它是SCOPE_IDENTITY()函數返回INT數據,你試圖用一個字符串來連接int值。由於INT是一種數據類型,具有較高的主持人sql服務器試圖將字符串轉換爲INT並失敗,並且您得到錯誤。

+0

我得到這個錯誤:不能將值NULL插入列'QuoteNumber – Pomster

+0

這意味着您的列QuoteNumber不允許NULL,並且您試圖插入空值。它與上面的查詢無關。檢查其餘的代碼。 –

+0

我想我的Scope_Identity()返回null – Pomster

2

試着做這樣的:

SELECT @Date = CONVERT(VARCHAR(10), GETDATE(), 120); 

你應該總是使用長度varchar(),雖然不影響此查詢。

然後,scope_identity()返回一個數字,所以你需要CONVER的是:

SET @QuoteNumber = 'QU-' + @Date + '-' + cast(SCOPE_IDENTITY() as varchar(255); 
+0

我得到了相同的錯誤 – Pomster

+0

前的錯誤無關的日期。這是因爲'scope_identity()'返回一個數字。 –

1

SCOPE_IDENTITY()導致的錯誤。您還需要將它投射到varchar。這是造成問題