SQL从元数据动态执行子字符串表达式
我将子字符串表达式存储在元数据表中,例如,以便映射到表中的不同列SQL从元数据动态执行子字符串表达式,sql,sql-server-2012,substring,dynamic-sql,Sql,Sql Server 2012,Substring,Dynamic Sql,我将子字符串表达式存储在元数据表中,例如,以便映射到表中的不同列 Stagingtable: Rawdata T300 Apples Columnmapping Splitfunction TABLEID column tablemappingchar SUBSTRING (RAWDATA,1,1) 1 datatype t SUBSTRING (RAWDATA,2,3) 1 datavalue t
Stagingtable:
Rawdata
T300 Apples
Columnmapping
Splitfunction TABLEID column tablemappingchar
SUBSTRING (RAWDATA,1,1) 1 datatype t
SUBSTRING (RAWDATA,2,3) 1 datavalue t
SUBSTRING (RAWDATA,,5,10) 1 dataname t
Tablemapping
TableId tablename
1 datavalues
我将原始数据加载到staging表中,然后希望使用元数据拆分函数将数据映射到最终的表和列
我使用的是动态SQL,因为我希望它能够在输出中执行拆分函数
Declare @SQL nvarchar (1000) = n' select replace(splitfunction,''rawdata'',st.rawdata) as columndata
Tableid,tablename,column
From tablemapping tm
Join columnmapping cm on cm.tableid=tm.tableid
Join staging st on substring(st.rawdata,0,1)=cm.tablemappingchar
'
Exec (@sql)
我希望输出执行子字符串函数,动态sql的结果应该是:
Columndata tableid tablename column
T 1 datavalues datatype
300 1 datavalues datavalue
apples 1 datavalues dataname
我哪里做错了?
输出只是像这样将split函数的显式文本抛出给我,但没有执行该函数
Substring ('t300 apples',1,1)
Substring ('t300 apples',2,3)
Substring ('t300 apples',5,10)
使用动态sql不能做到这一点吗?标记您正在使用的dbms。该代码是特定于产品的。将exec(@sql)放在“print@sql”中,然后复制该字符串并在另一个窗口中执行。这是你想要的绳子吗?它的行为是否符合预期?