我正在转换表中的数据,然后将其插入到新表中。我不希望新表包含转换中的某些值,那么是否存在执行以下操作的适当方法?
INSERT INTO #transformed (NewValue)
SELECT func_doTransformation(ot.OldValue)
FROM OriginalTable ot
WHERE func_doTransformation(ot.OldValue) <> 'bad data'
我已经考虑过先进行INSERT ...
之后再进行DELETE ... WHERE
,但这似乎只比两次调用func_doTransformation
效率低些。
答案 0 :(得分:2)
在这种情况下,我将使用CTE。
; WITH cte AS (SELECT Val = func_doTransformation(ot.OldValue) FROM OriginalTable ot)
INSERT INTO #transformed (NewValue)
SELECT Val FROM cte WHERE Val <> 'Bad Data';
答案 1 :(得分:1)
您可以嵌套<script src="https://jqwidgets.com/public/jqwidgets/jqx-all.js"></script>
<link href="https://jqwidgets.com/public/jqwidgets/styles/jqx.base.css" rel="stylesheet"/>
<div id="grid">
</div>
来避免两次调用select
:
func_doTransformation
答案 2 :(得分:1)
在SQL Server中,可以使用apply
为函数结果分配一个名称:
INSERT INTO #transformed (NewValue)
SELECT v.newValue
FROM OriginalTable ot CROSS APPLY
(VALUES (func_doTransformation(ot.OldValue))) v(newValue)
WHERE v.newValue <> 'bad data';
当然,也可以使用CTE和子查询。