Sql 循环表和列后动态清理数据

Sql 循环表和列后动态清理数据,sql,sql-server,Sql,Sql Server,在将结果插入staging表之前,需要 清除所有空白和回车。很遗憾,我不能提供 示例数据,因为它是私人公司数据。所有的桌子都有不同的颜色 NVARCHAR类型的列* DECLARE @NAME NVARCHAR(4000) = '' DECLARE @SQL NVARCHAR(4000); DECLARE @CNAME NVARCHAR(4000) = '' DECLARE @COUNT INT --Storing all the database names with schema id =

在将结果插入staging表之前,需要 清除所有空白和回车。很遗憾,我不能提供 示例数据,因为它是私人公司数据。所有的桌子都有不同的颜色 NVARCHAR类型的列*

DECLARE @NAME NVARCHAR(4000) = ''
DECLARE @SQL NVARCHAR(4000);
DECLARE @CNAME NVARCHAR(4000) = ''
DECLARE @COUNT INT

--Storing all the database names with schema id = dbo
SELECT [name]
INTO #TEMP
FROM LIST.sys.tables
WHERE [schema_id] = SCHEMA_ID('dbo')

SELECT TOP 1 @NAME = [name] FROM #TEMP

--Looping through all the tables
WHILE (SELECT COUNT(*) FROM #TEMP) > 0
BEGIN 

SELECT @CNAME += '[' + A.[Name] + '],'
FROM LIST.sys.columns A
JOIN LIST.sys.tables B
ON A.[object_id] = B.[object_id]
WHERE B.[object_id] = OBJECT_ID(@NAME)
AND B.[schema_id] = 1
AND A.[name] <> 'Inserted_Date'

SET @CNAME = LEFT(@CNAME, LEN(@CNAME) - 1)

SET @SQL = '
SELECT ' + @CNAME + '
INTO #TEMP2
FROM [LIST].[dbo].[' + @NAME + ']
EXCEPT
SELECT ' + @CNAME + '
FROM [LIST].[STG].[' + @NAME + ']

--Here the cleaning needs to happen(Clean all columns from each table 
dynamically)

INSERT INTO [LIST].[STG].[' + @NAME + '] (' + @CNAME + ', [Inserted_Date])
SELECT ' + @CNAME + ', GETDATE()
FROM #TEMP2
'

EXEC(@SQL)           
SET @CNAME = ''   
SELECT TOP 1 @NAME = [name] FROM #TEMP  
DELETE FROM #TEMP WHERE @NAME = [name]
END
DROP TABLE #TEMP

你也许应该换个新的

INSERT INTO [LIST].[STG].[' + @NAME + '] (' + @CNAME + ', [Inserted_Date])
SELECT ' + @CNAME + ', GETDATE()
FROM #TEMP2


构建一个不同的@CNAME,该@CNAME仅在varchar列上具有LTRIM、RTRIM和REPLACE函数,并在SELECT INTO TEMP2上使用它。非常感谢!!!很遗憾,我不能提供样本数据,因为这是私人公司的数据。-示例数据不需要是实际数据或真实数据。你总是可以编造一些假数据或模拟数据。
INSERT INTO [LIST].[STG].[' + @NAME + '] (' + @CNAME + ', [Inserted_Date])
SELECT ' + REPLACE(REPLACE(REPLACE(CAST(@CNAME AS NVARCHAR(MAX)), CHAR(13), ''), CHAR(10), ''), ' ','') + ', GETDATE()
FROM #TEMP2