0
我很好奇,爲什麼我得到一個語法錯誤鑄造「TMP的」 的DataItem像這樣廣東話投在CTE
;WITH tmp(date, CAST(dataitem AS VARCHAR(255)), data) AS
(
SELECT
date, LEFT(msg, CHARINDEX(';', msg + ';') - 1),
STUFF(msg, 1, CHARINDEX(';', msg + ';'), '')
FROM
DB1
WHERE
action LIKE 'FILE UPLOAD FTP'
AND date BETWEEN '06/01/2016' AND '07/05/2017'
UNION ALL
SELECT
date, CHARINDEX(';', data + ';'),
STUFF(data, 1, CHARINDEX(';', Data + ';'), '')
FROM
tmp
WHERE
data > ''
)
SELECT
date, dataitem,
REPLACE(SUBSTRING(dataitem, 1, CHARINDEX('|', dataitem) - 1), 'FTP UPLOAD: ', '') AS orig_file_name,
SUBSTRING(dataitem, CHARINDEX('|', dataitem) + 1, 8000) AS file_name,
(SELECT TOP 1 counts FROM DB1
WHERE action LIKE 'FILTER' AND date > tmp.date
AND msg LIKE SUBSTRING(tmp.dataitem, CHARINDEX('|', dataitem) + 1, 8000) + '%'
ORDER BY date) AS filter_counts,
FROM
tmp
ORDER BY
date
考慮到這一工作,但會以不匹配的數據類型錯誤,由於:
;WITH tmp(date, dataitem , data) AS
(
SELECT
date, LEFT(msg, CHARINDEX(';', msg + ';') - 1),
STUFF(msg, 1, CHARINDEX(';', msg + ';'), '')
FROM
DB1
WHERE
action LIKE 'FILE UPLOAD FTP'
AND date BETWEEN '06/01/2016' AND '07/05/2017'
UNION ALL
SELECT
date, CHARINDEX(';', data + ';'),
STUFF(data, 1, CHARINDEX(';', Data + ';'), '')
FROM
tmp
WHERE
data > ''
)
SELECT
date, dataitem,
REPLACE(SUBSTRING(dataitem, 1, CHARINDEX('|', dataitem) - 1), 'FTP UPLOAD: ', '') AS orig_file_name,
SUBSTRING(dataitem, CHARINDEX('|', dataitem) + 1, 8000) AS file_name,
(SELECT TOP 1 counts FROM DB1
WHERE action LIKE 'FILTER'
AND date> tmp.date
AND msg LIKE SUBSTRING(tmp.dataitem, CHARINDEX('|', dataitem) + 1, 8000) + '%'
ORDER BY date) AS filter_counts,
FROM
tmp
ORDER BY
date
因爲列名就是這樣;名。他們沒有像在查詢定義中那樣定義結構和類型https://technet.microsoft.com/en-us/library/ms175972(v=sql.105).aspx。注意:只有在查詢定義中提供了所有結果列的不同名稱時,列名列表纔是可選的。 – xQbert