Vin*_*ara 1 sql sql-server validation
我有一个SQL Server存储过程,它接受XML参数并将值复制到临时表中.然后验证这些值以确保提交所有必需的数据,并在数据不"干净"时采取措施.如果该数据是好的,那么我继续处理一系列业务规则并最终从临时表中插入多个表.
我的问题似乎很明显,但无论如何我都会问.在我插入后续表格中时,我直接从中选择存储在临时表中的值.我是否需要再次验证值以确保我们没有空值?
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)
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
是否有必要在插入之前检查null和empty的值?我认为如果我已经验证了所有内容已经公平,那么在插入时再次验证它将是一种浪费.我已经做过空检查等.
我不确定这个问题是否属于代码审查,如果有的话随时关闭它.
此表中只有一行.
你可以简单地做
INSERT INTO Table (column1, column2)
SELECT ISNULL(Column1, 0),
ISNULL(Column2, 0)
FROM #TempTable;
-- Where if there is conditions
Run Code Online (Sandbox Code Playgroud)
如果你想检查NULLs并替换它0,否则,你可以简单地插入数据
INSERT INTO Table(Column1, Column2)
SELECT Column1,
Column2
FROM #TempTable;
-- Where if there is conditions
Run Code Online (Sandbox Code Playgroud)
没有必要声明这些变量,也不需要声明这部分
SET @col1Val = (SELECT column1 FROM #TempTable)
SET @col2Val = (SELECT column2 FROM #TempTable)
Run Code Online (Sandbox Code Playgroud)
不是你的想法,它只会在你有1行时#TempTable,如果这个表有超过1行,那么它会抛出一个错误
子查询返回多个值.当子查询跟随=时,这是不允许的!=,<,<=,>,> =或者当它用作表达式时.
更新:
我问的是,如果我已经在临时表上完成了验证,是否有必要在我从中选择进行插入时再次进行验证?
如果您在插入数据时已经检查了数据,并且在插入#TempTable数据后确定数据没有变化,那么您可以直接插入数据,无需检查NULLs两次.