简体   繁体   English

如何在临时表中获取SQL结果并在临时表上运行另一个脚本

[英]How to get SQL result in a temp table and run another script on temp table

I need to split one column into multiple columns by delimiters. 我需要用定界符将一列拆分为多列。 So I have written following script and its working fine. 因此,我编写了以下脚本及其正常工作。

DECLARE @delimiter VARCHAR(50)
SET @delimiter=',' 
;WITH CTE AS
( 
    SELECT

        [ODC_Number],
        CAST('<M>' + REPLACE([ODC_Number], @delimiter , '</M><M>') + '</M>' AS XML) 
        AS [Employee Name XML]
    FROM  tbl_ODC_Number 
)
SELECT

     [ODC_Number] as ODC_Number,
     [Employee Name XML].value('/M[1]', 'varchar(50)') As [ODC_Number1],
     [Employee Name XML].value('/M[2]', 'varchar(50)') As [ODC_Number2],
     [Employee Name XML].value('/M[3]', 'varchar(50)') As [ODC_Number3]

FROM CTE

Now I need to know how to get this result in a temp table and run a following script to check format of each new column to make sure each column data have right format: 现在,我需要知道如何在临时表中获取此结果,并运行以下脚本来检查每个新列的格式,以确保每个列数据的格式正确:

Format: 格式:

ODC-XXXX-XXX-XXXXXX   ODC-2018-076-895689
  • Each value length should be 19 digits 每个值的长度应为19位数字
  • Start only with ODC 仅从ODC开始
  • Check is there are any other delimiters except commas 检查除逗号外是否还有其他定界符

So I've written following code (this needs to be written for each column) 因此,我编写了以下代码(需要为每一列编写)

Select * from TEMPDB
Where

Len (ODC_Number1) < '19' or
ODC_Number1 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1 like '%[%*$#@;&/.\ ]%' or
ODC_Number1 not like '[CRI]%' or
ODC_Number1 like '%-CRI%'

I've written those two scripts but don't know how to combine them? 我已经编写了这两个脚本,但是不知道如何将它们组合在一起?

To get your data into a temp table simply do a SELECT * INTO #Temp FROM CTE 要将数据放入临时表中,只需执行SELECT * INTO #Temp FROM CTE

DECLARE @delimiter VARCHAR(50)
SET @delimiter=',' 
;WITH CTE AS
( 
    SELECT

        [ODC_Number],
        CAST('<M>' + REPLACE([ODC_Number], @delimiter , '</M><M>') + '</M>' AS XML) 
        AS [Employee Name XML]
    FROM  tbl_ODC_Number 
)
SELECT

     [ODC_Number] as ODC_Number,
     [Employee Name XML].value('/M[1]', 'varchar(50)') As [ODC_Number1],
     [Employee Name XML].value('/M[2]', 'varchar(50)') As [ODC_Number2],
     [Employee Name XML].value('/M[3]', 'varchar(50)') As [ODC_Number3]

       INTO #Temp
FROM CTE

Now for your checks execute your code for each column separated with OR 现在进行检查,对用OR分隔的每一列执行代码

Select * 
from #Temp
Where
(
Len (ODC_Number1) < '19' or
ODC_Number1 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1 like '%[%*$#@;&/.\ ]%' or
ODC_Number1 not like '[CRI]%' or
ODC_Number1 like '%-CRI%'
)
OR 
(
Len (ODC_Number2) < '19' or
ODC_Number2 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number2  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number2 like '%[%*$#@;&/.\ ]%' or
ODC_Number2 not like '[CRI]%' or
ODC_Number2 like '%-CRI%'
)
OR 
(...... You get the idea....

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM