MSSQL - 仅当所有值都不为空时才插入值
Posted
技术标签:
【中文标题】MSSQL - 仅当所有值都不为空时才插入值【英文标题】:MSSQL - INSERT INTO VALUES only if all Values are not null 【发布时间】:2022-01-09 14:37:19 【问题描述】:所以我有这个查询
"INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
VALUES (
(SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field2),
(SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field1),
12
);"
如果 VALUES 中的 SELECT 语句之一没有返回值(null),我如何取消/中止 INSERT 语句
ps:$field1 和 $field2 是 powershell 脚本的变量
================================================ =======================
这样的东西会起作用吗?我不确定语法。
declare @Variable1, @Variable2;
set @Variable1 = SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName= $field2
set @Variable2 = SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName= $field1
if @Variable1 IS NOT Null AND @Variable2 IS NOT Null
INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
VALUES (@Variable1, @Variable2, 12);
【问题讨论】:
【参考方案1】:您可以尝试使用INSERT INTO ... SELECT
语句:
INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
SELECT a, b, c FROM (
SELECT
(SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field2) AS a,
(SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field1) AS b,
12 AS c
) WHERE a IS NOT NULL AND b IS NOT NULL
然后你会用WHERE a IS NOT NULL AND b IS NOT NULL
中止INSERT
【讨论】:
不幸的是,这不起作用,因为 WHERE 子句仅适用于列属性,并且在 SELECT 语句之前(在 FROM 表之后)被查询,在 SSMS 中,a、b 和 c 带有下划线(红色)并说“无效的列名”,当我开始查询时出现错误“关键字 WHERE 附近的语法不正确” 用HAVING
代替WHERE
怎么样?以上是关于MSSQL - 仅当所有值都不为空时才插入值的主要内容,如果未能解决你的问题,请参考以下文章