我有一个SQL Server存储过程,该过程使用XML参数并将值复制到临时表中。然后,对值进行验证,以确保提交了所有必需的数据,如果数据不是“干净的”,则采取措施。如果这些数据很好,那么我继续处理一系列业务规则,并最终从temp表插入到多个表中。
我的问题似乎很明显,但是我还是要问。在插入到后续表中时,我通过直接从临时表中进行选择来使用存储在临时表中的值。我是否需要再次验证值以确保没有空值?
DECLARE @col1Val AS INT
DECLARE @col2Val AS INT
SET @col1Val = (SELECT column1 FROM #TempTable)
SET @col2Val = (SELECT column2 FROM #TempTable)
INSERT INTO Table (column1, column2)
VALUES (@col1Val, @col2Val)
VS:
DECLARE @col1Val AS INT
DECLARE @col2Val AS INT
SET @col1Val = (SELECT column1 FROM #TempTable)
SET @col2Val = (SELECT column2 FROM #TempTable)
INSERT INTO Table (column1, column2)
VALUES (ISNULL(@col1Val, 0), ISNULL(@col2Val, 0))
是否有必要在插入之前检查这些值是否为null和empty?我可以公平地说,如果我已经验证了所有内容,那么在插入时再次进行验证将是一种浪费。我已经做过空检查等。
我不确定这个问题是否属于代码审查,如果可以的话,请关闭它。
此表中只有一行。
答案 0 :(得分:5)
您可以简单地这样做
INSERT INTO Table (column1, column2)
SELECT ISNULL(Column1, 0),
ISNULL(Column2, 0)
FROM #TempTable;
-- Where if there is conditions
如果要检查NULL
并用0
代替,否则,只需将数据插入为
INSERT INTO Table(Column1, Column2)
SELECT Column1,
Column2
FROM #TempTable;
-- Where if there is conditions
不需要声明这些变量,这部分也不需要声明
SET @col1Val = (SELECT column1 FROM #TempTable)
SET @col2Val = (SELECT column2 FROM #TempTable)
并不是您所想的,它仅在#TempTable
中有1行时才起作用,如果该表有1行以上,则会抛出错误
子查询返回多个值。当子查询后跟= ,!时,不允许这样做。 =,<,<=,>,> =或当它用作表达式时。
更新:
我要问的是我是否已经对temp表进行了验证,当我从中进行选择时是否有必要再次进行验证?
如果在将数据插入#TempTable
时已经检查过数据,并且确定插入后数据没有变化,那么您只需插入数据即可直接,无需检查NULL
两次。