2016-08-24 53 views
3

您好我有一个Access查询(见下文),我试图在SQL Server中重新创建:格式在SQL

UPDATE tblProducts SET tblProducts.ProductCode = [tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000") 
WHERE (((tblProducts.ProductCode) Is Null Or (tblProducts.ProductCode) <>[tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000"))); 
我在与格式化功能麻烦

+0

SQL-Server或访问? – Jens

+0

你面临的困难是什么?任何错误消息? – Ahmad

+0

对不起,我发布的查询是一个访问查询,即时试图重新创建它在SQL – Bunion

回答

2

对于SQL Server 2012以上可以我们E:

UPDATE tblProducts 
SET ProductCode = [ProductPrefix] + Format([ProductID],'00000') 
WHERE ProductCode IS NULL OR ProductCode != [ProductPrefix] + Format([ProductID],'00000'); 

STUFFSQL服务器(从2008))的另一种方法:

UPDATE tblProducts 
SET ProductCode = [ProductPrefix] + STUFF('00000' + CAST(ProductID as nvarchar(10)),1,LEN(ProductID),'') 
WHERE ProductCode IS NULL OR 
    ProductCode != [ProductPrefix] + STUFF('00000' + CAST(ProductID as nvarchar(10)),1,LEN(ProductID),'') 
+0

辉煌我试图在SQL Server 2008上使用FORMAT()。谢谢! – Bunion

5

这里是做格式化的一种方法:

UPDATE tblProducts 
    SET ProductCode = [ProductPrefix] + 
         RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5) 
WHERE ProductCode Is Null OR 
     ProductCode <> [ProductPrefix] + RIGHT('00000' + CAST(ProductId as VARCHAR(255)), 5); 

其实,要避免这些问题,我想那句此为:

WITH toupdate AS (
     SELECT p.*, 
      ([ProductPrefix] + 
       RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5) 
      ) as new_ProductCode 
     FROM tblProducts p 
    ) 
UPDATE toupdate 
    SET ProductCode = new_ProductCode 
    WHERE ProductCode Is Null OR 
      ProductCode <> new_ProductCode; 
2

使用的,而不是这个format([tblProducts].[ProductID], "00000")

right('00000'+cast([tblProducts].[ProductID] as varchar(5)),5)