2014-03-25 293 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。这是造成问题