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”中,然后复制该字符串并在另一个窗口中执行。这是你想要的绳子吗?它的行为是否符合预期?