我创建了一个非常简单的示例,显示我在使用动态SQL的更复杂的查询时遇到的问题,并且我无法弄清楚为什么CTE在标准版本不导致错误。任何想法或建议都会非常有帮助。CTE导致Converison失败错误
使用CTE时出错: 从字符串转换日期和/或时间时转换失败。
我想实现我的动态查询如下:不符合特定数据类型(日期在这种情况下) 标志的记录。如果他们通过了这一步骤,他们稍后会对照查找表进行检查,以验证他们是我期望的值(验证指定范围内的日期)。
-- Table Setup
CREATE TABLE #ValidDate
(
V INT IDENTITY (1, 1) NOT NULL,
VDate DATE NULL
)
INSERT INTO #ValidDate
VALUES ('02/20/2014'), ('02/21/2014'), ('02/22/2014'), ('02/23/2014'), ('02/25/2014')
CREATE TABLE #DatesToValidate
(
I INT IDENTITY (1, 1) NOT NULL,
IDate VARCHAR(30) NULL
)
INSERT INTO #DatesToValidate
VALUES ('apple'), ('02/21/2014'), ('orange'), ('02/23/2014')
CREATE TABLE #Errors
(
ID INT,
Dates VARCHAR(30)
)
INSERT INTO #Errors
SELECT *
FROM #DatesToValidate
WHERE ISDATE(IDate) <> 1
下面是标准的查询(工程):
SELECT *
FROM #DatesToValidate
WHERE I NOT IN ( SELECT ID
FROM #Errors)
AND IDate NOT IN ( SELECT VDate
FROM #ValidDate)
下面是CTE(不工作):
;WITH CTE AS
(
SELECT *
FROM #DatesToValidate
WHERE I NOT IN ( SELECT ID
FROM #Errors)
)
SELECT *
FROM CTE
WHERE IDate NOT IN ( SELECT VDate
FROM #ValidDate)
以供将来参考MySQL是比SQL-Server中的完全不同DBMS和他们不应该被标记相同。 – Zane
你能提供更多关于“不工作”的细节吗? –