2016-08-24 52 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)