我有这个问题:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT
CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE1, VALUE2 FROM T2
END
这不起作用,我得到:“INSERT语句的选择列表包含的项目少于插入列表.SELECT值的数量必须与INSERT列的数量相匹配。”
相反,我必须使用:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT
CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE1 FROM T2
END
CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE2 FROM T2
END
但这会降低性能。有没有正确的解决方案?在单个CASE中,受益于第二个表t2的sinqle查询。
答案 0 :(得分:1)
EXISTS(SELECT * FROM T2)没有做任何事情,语法错误
试试这个:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM T2
这也是有效的,虽然不是很有用,但它似乎是你想要做的:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM T2
WHERE exists (SELECT 1 FROM T2)
答案 1 :(得分:0)
为什么不:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM T2
如果T2中没有行,则不会在#t1中插入任何内容。
答案 2 :(得分:0)
简化:
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2
FROM T2
没有行的情况不会在此处执行任何操作。您无需为此进行特殊测试。
答案 3 :(得分:0)
你不能使用像
这样的东西 INSERT INTO #t1 (VALUE1, VALUE2)
SELECT value1, value2 from #t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)
代替?
否则你的意图可能是
INSERT INTO #t1 (VALUE1)
SELECT CONCAT(value1, value2) from t2 Couldn't you use something like
INSERT INTO #t1 (VALUE1, VALUE2)
SELECT value1, value2 from t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)
代替?
否则你的意图可能是
INSERT INTO #t1 (VALUE1)
SELECT value1, value2 from #t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)
如果t2.value2为null,则导致't2.value2'插入t1.value1