【发布时间】:2018-05-11 14:36:50
【问题描述】:
我正在尝试向我的查询添加一个临时表,以便我可以查询该临时表,我已经搜索了互联网,但我找不到解决方案。 这是我的查询
;WITH cte AS (
SELECT ID, g.Name
FROM game.Game g WITH(NOLOCK
WHERE ID IN (SELECT Data FROM system.Split(1, ','))
UNION ALL
SELECT g.ID, g.Name
FROM game.Game g WITH(NOLOCK)
JOIN cte ON g.ParentID = cte.ID
)
SELECT c.ID,
c.Name
FROM cte c
INNER JOIN list.Type gt WITH(NOLOCK) ON c.TypeId = gt.TypeID
WHERE c.ID NOT IN (SELECT Data FROM system.Split(1, ','))
AND c.ID IN (SELECT ID FROM game.code WITH(NOLOCK)
WHERE ID = c.ID
AND StatusCode IN ('OP', 'CL', 'SU')
AND isDisplay = 'True'
AND GETDATE() BETWEEN DisplayStart AND DisplayEnd
AND GETDATE() < ISNULL(ResultDateTime, ResultExpected)
)
当我运行它时,它给了我以下信息
ID | Name
1111 | BaseBall
2222 |BasketBall
45896 |Relay
现在我尝试如下创建一个临时表
Create Table #temp(
ID int,
Name varchar
)
;WITH cte AS (
SELECT ID, g.Name
FROM game.Game g WITH(NOLOCK)
WHERE ID IN (SELECT Data FROM system.Split(1, ','))
UNION ALL
SELECT g.ID, g.Name
FROM game.Game g WITH(NOLOCK)
JOIN cte ON g.ParentID = cte.ID
)
insert into #temp // i wanted to set these values in the temp table
SELECT c.ID,
c.Name
FROM cte c
INNER JOIN list.Type gt WITH(NOLOCK) ON c.TypeId = gt.TypeID
WHERE c.ID NOT IN (SELECT Data FROM system.Split(1, ','))
AND c.ID IN (SELECT ID FROM game.code WITH(NOLOCK)
WHERE ID = c.ID
AND StatusCode IN ('OP', 'CL', 'SU')
AND isDisplay = 'True'
AND GETDATE() BETWEEN DisplayStart AND DisplayEnd
AND GETDATE() < ISNULL(ResultDateTime, ResultExpected)
)
每次我尝试将此信息存储在临时表中时,它都会给我一个错误“列名或提供的值的数量与表定义不匹配。”但是我只有两个值。我做错了什么我看不到?
【问题讨论】:
-
你为什么使用
NOLOCK? -
你给出的 Temp 表中 varchar 列的长度是多少?
-
展开和@Larnu 的评论...blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere 你有一个名为1 的列吗?那个 split 函数在我看来很可疑。
标签: sql sql-server temp-tables