2013-12-23 36 views
0

我想從表中動態刪除所有NULLS。下面的腳本適用於Money數據類型,但現在在將nvarchar值ProjectName轉換爲數據類型int錯誤時拋出'轉換失敗。我不明白它在說什麼轉換。動態NULL刪除,轉換失敗,但沒有轉換

-- Get columns to remove nulls from 

SELECT c.column_id,c.name,c.system_type_id,t.name as [Type] 
INTO #Temp 
FROM sys.columns c 
    JOIN sys.types t ON c.system_type_id = t.system_type_id 
    JOIN sys.tables st ON c.object_id = st.object_id 
WHERE st.name = 'Project' 
AND t.name = 'varchar'--in ('int','datetime','bit','varchar') --'money' 
ORDER BY t.name--c.column_id 
SELECT * FROM #Temp 

--Build SQL query to update null columns to blanks 


DECLARE @CID int = 1; 
DECLARE @CName nvarchar(30); 
DECLARE @SQL_STRING nvarchar(500); 
DECLARE @MaxCID int = (SELECT MAX(column_id) FROM #Temp) 

WHILE (@CID <= @MaxCID) 
BEGIN 


SET @CName = (SELECT name FROM #Temp t WHERE @CID = t.column_id) 
SET @SQL_STRING = N'UPDATE orders.Project SET ' + @CName + ' = ISNULL('[email protected]+','''');' 
       EXEC sp_executesql @SQL_STRING 

SET @CID = (@CID + 1) 
PRINT @CID + @CName 
END 

drop table #Temp 

回答

0

由於CID是Int,但CNAME是nvarchar,因此打印行可能有問題。您可以嘗試將CID轉換爲nvarchar以顯示連接的輸出。