我有一个查找,它从SQL Server表中检索一些记录,该表包含服务器、数据库、架构、表名和带值的where子句。这些值被传递到复制数据(在ForEach中(。在ForEach流中,我还插入了一个查找,以删除列名中的空格和任何特殊字符,从而保存到拼花文件中。我的问题是我不能得到";其中";条款生效。
表中的值:
SRC_SERVERNAME | SRC_DATABASE | DCC_SCHEMANAME | >SRC_TABLENAME | SRC_WERE_DATE_CLAUSE |
---|---|---|---|---|
SQ01 | NAV | dbo | >公司$销售发票头过帐日期]>='2021-01-01'
我已经解决了这个问题,ADF处理字符的方式不同。
必须更新where子句并添加额外的字符。
所以不是:
输入
INSERT INTO [dbo].[ADF_DL_ONPREMSQL_CONFIGURATION] ([SRC_SERVERNAME], [SRC_DATABASENAME], [SRC_SCHEMANAME], [SRC_TABLENAME], [SRC_WHERE_DATE_CLAUSE])
VALUES ('SQ01', 'Company', 'dbo', 'Company$Sales Invoice Header', 'where [Posting Date] >= ''2021-01-01''')
输出
where [Posting Date] >= '2021-01-01'
我更新了:
INSERT INTO [dbo].[ADF_DL_ONPREMSQL_CONFIGURATION] ([SRC_SERVERNAME], [SRC_DATABASENAME], [SRC_SCHEMANAME], [SRC_TABLENAME], [SRC_WHERE_DATE_CLAUSE])
VALUES ('SQ01', 'Company', 'dbo', 'Company$Sales Invoice Header', 'where [Posting Date] >= ''''2021-01-01''''')
输出
where [Posting Date] >= ''2021-01-01''
最终查询
@concat('
DECLARE @s VARCHAR(MAX)
DECLARE @servername VARCHAR(500) = ''', item().SRC_SERVERNAME ,'''
DECLARE @databasename VARCHAR(500) = ''', item().SRC_DATABASENAME ,'''
DECLARE @schemaname VARCHAR(500) = ''', item().SRC_SCHEMANAME ,'''
DECLARE @tablename VARCHAR(500) = ''', item().SRC_TABLENAME ,'''
DECLARE @wherename VARCHAR(500) = ''', string(item().SRC_WHERE_DATE_CLAUSE) ,'''
SELECT @s = ISNULL(@s + '', '','''') + ''['' + c.name + '']'' + '' as [''+replace(replace(replace(replace(replace(replace(replace(c.name,'' '',''''),''ö'',''o''), ''ä'',''a''),''å'',''a''),''('',''_''),'')'',''''),''-'',''_'') +''] ''
FROM sys.all_columns c join sys.tables t
ON c.object_id = t.object_id
WHERE t.name = @tablename
SELECT ''select '' + @s + '' from '' + ''['' + @servername + '']'' + ''.'' + ''['' + @databasename + '']'' + ''.'' + ''['' + @schemaname + '']'' + ''.'' + ''['' + @tablename + '']'' + '' '' + @wherename as Query')