Sql server 动态NULL删除,转换失败,但没有转换

Sql server 动态NULL删除,转换失败,但没有转换,sql-server,tsql,Sql Server,Tsql,我正在尝试动态删除表中的所有空值。下面的脚本适用于Money数据类型,但现在抛出“将nvarchar值ProjectName转换为数据类型int时转换失败”错误。我不明白它在说什么 -- 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.syste

我正在尝试动态删除表中的所有空值。下面的脚本适用于Money数据类型,但现在抛出“将nvarchar值ProjectName转换为数据类型int时转换失败”错误。我不明白它在说什么

-- 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('+@CName+','''');'
                EXEC sp_executesql @SQL_STRING

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

drop table #Temp

您的打印行可能有问题,因为CID是Int,而CNAME是nvarchar。您可以尝试将CID强制转换为nvarchar以显示连接的输出