【问题标题】:MSSQL - INSERT INTO VALUES only if all Values are not nullMSSQL - 仅当所有值都不为空时才插入值
【发布时间】: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);

【问题讨论】:

    标签: sql sql-server powershell


    【解决方案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怎么样?
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2017-07-08
    • 2013-03-09
    • 2021-02-21
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    相关资源
    最近更新 更多