Как получить результат SQL во временной таблице и запустить другой скрипт для временной таблицы - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно разделить один столбец на несколько столбцов разделителями. Итак, я написал следующий скрипт и он работает нормально.

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

Я нахожусь на очень базовом уровне SQL еще. Я был бы признателен, если бы кто-нибудь мог помочь мне заставить это работать вместе. Большое вам спасибо.

Я написал эти два сценария, но не знаю, как их объединить

1 Ответ

0 голосов
/ 27 июня 2019

Чтобы получить данные во временную таблицу, просто выполните 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....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...