簡體   English   中英

如何在臨時表中獲取SQL結果並在臨時表上運行另一個腳本

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

我需要用定界符將一列拆分為多列。 因此,我編寫了以下腳本及其正常工作。

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

現在,我需要知道如何在臨時表中獲取此結果,並運行以下腳本來檢查每個新列的格式,以確保每個列數據的格式正確:

格式:

ODC-XXXX-XXX-XXXXXX   ODC-2018-076-895689
  • 每個值的長度應為19位數字
  • 僅從ODC開始
  • 檢查除逗號外是否還有其他定界符

因此,我編寫了以下代碼(需要為每一列編寫)

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%'

我已經編寫了這兩個腳本,但是不知道如何將它們組合在一起?

要將數據放入臨時表中,只需執行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

現在進行檢查,對用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