Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中插入之前验证输入参数_Sql_Sql Server_Validation - Fatal编程技术网

在SQL Server中插入之前验证输入参数

在SQL Server中插入之前验证输入参数,sql,sql-server,validation,Sql,Sql Server,Validation,我有一个SQL Server存储过程,它接收XML参数并将值复制到临时表中。然后验证这些值,以确保提交了所有必需的数据,并在数据不干净时采取措施。如果数据是好的,那么我将继续处理一系列业务规则,并最终从临时表插入多个表中 我的问题似乎很明显,但我还是要问。在插入到后续表中时,我通过直接从临时表中选择来使用存储在临时表中的值。我是否需要再次验证这些值以确保没有空值 DECLARE @col1Val AS INT DECLARE @col2Val AS INT SET @col1Val = (SE

我有一个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)
VS:

插入前是否需要检查这些值是否为null和empty?我想公平地说,如果我已经验证了所有内容,那么在插入时再次验证它将是一种浪费。我已经做了空值检查等

我不确定这个问题是否属于代码审查,如果是,请随意关闭它

此表中只有一行

你只需做

INSERT INTO Table (column1, column2)
SELECT ISNULL(Column1, 0),
       ISNULL(Column2, 0)
FROM #TempTable;
-- Where if there is conditions
如果要检查空值并替换为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)
这不是您所想的,它将在您的表中有1行时工作,如果此表有多行,那么它将抛出一个错误

子查询返回了多个值。当子查询在=、!=、=或者当它被用作表达式时

更新:

我想问的是,如果我已经在临时表上进行了验证,那么当我从中选择进行插入时,是否需要再次验证

如果您在将数据插入到可诱惑文件时已经检查了数据,并且您确信插入数据后数据没有变化,那么您可以直接插入数据,无需检查两次空值。

您只需执行以下操作即可

INSERT INTO Table (column1, column2)
SELECT ISNULL(Column1, 0),
       ISNULL(Column2, 0)
FROM #TempTable;
-- Where if there is conditions
如果要检查空值并替换为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)
这不是您所想的,它将在您的表中有1行时工作,如果此表有多行,那么它将抛出一个错误

子查询返回了多个值。当子查询在=、!=、=或者当它被用作表达式时

更新:

我想问的是,如果我已经在临时表上进行了验证,那么当我从中选择进行插入时,是否需要再次验证


如果您在将数据插入Tentiable时已经检查了数据,并且您确定在插入数据后数据没有变化,那么您可以直接插入数据,不需要两次检查空值。

您是否在Tentable中有多行?您是否在Tentable中有多行?此临时表中将只有一行,因为存储过程一次只获取一条记录我想我要问的是,如果我已经对临时表进行了验证,是否有必要当我从中选择插入时再次验证?谢谢,这就是我想要的。值得注意的是,这个临时表中只有一行,因为存储过程一次只获取一条记录。我想我要问的是,如果我已经对临时表进行了验证,那么当我从临时表中选择插入时是否需要再次验证?谢谢,这就是我想要的。感激