Sql 循环表和列后动态清理数据
在将结果插入staging表之前,需要 清除所有空白和回车。很遗憾,我不能提供 示例数据,因为它是私人公司数据。所有的桌子都有不同的颜色 NVARCHAR类型的列*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 =
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