0

您可以在 SQL 的 INSERT INTO 语句中使用 WHERE 语句吗?

这是我目前正在尝试做的事情。

INSERT INTO AssetComponents(ComponentID, ComponentDescription)
VALUES (@ComponentType, @CompDescr)
WHERE (AssetTagNumber = @TagNo)

但是编译器的 WHERE 语句存在问题。

谢谢

** *更新* ***

这是我迄今为止使用的完整代码,并进行了修改

   protected void AddBut_Click(object sender, EventArgs e)
    {
        //still passing the Asset tag number forward here
        var ID = Request.QueryString["Id"];

        string sql = "";

        using (SqlConnection con = new SqlConnection("Data Source: *******************)
        {

            sql = "IF (AssetTagNumber = @TagNo) " +
                   "BEGIN " +
                   "INSERT INTO AssetComponents(ComponentID, ComponentDescription) " + 
                   "VALUES (@ComponentType, @CompDescr) " +
                   "END ";

            using (SqlCommand cmd = new SqlCommand(sql, con))
            {

              //  try
               // {
                    cmd.Parameters.AddWithValue("@TagNo", ID);
                    cmd.Parameters.AddWithValue("@ComponentType", TypeDDL.Text.Trim());
                    cmd.Parameters.AddWithValue("@CompDescr", DescrTB.Text.Trim());

                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                    Response.Redirect("ComponentDetails.aspx");
             //   }
            //    catch (SqlException ex) { MessageBox.Show(" "); }
            //    catch (Exception ex) { MessageBox.Show(" "); }
            }
        }
    }

对不起,我第一次不够清楚。

我想要做的是插入一条新记录,其中包含一个子句,如果这条记录有一个现有的 PK,然后使用这个键为该记录插入另一个条目

再次道歉

4

6 回答 6

5

为什么不直接使用 IF 子句?

IF (AssetTagNumber = @TagNo)
BEGIN
    INSERT INTO AssetComponents(ComponentID, ComponentDescription)
    VALUES (@ComponentType, @CompDescr)
END

对于带有 WHERE 脚本的语句,应类似于:

INSERT INTO AssetComponents(ComponentID, ComponentDescription)
SELECT @ComponentType, @CompDescr
FROM <table>
WHERE (AssetTagNumber = @TagNo)
于 2013-06-27T10:53:29.617 回答
2

你不能像那样“有条件地插入”。该WHERE子句仅适用于SELECT,UPDATEDELETE

要检查是否需要INSERT新记录,您需要使用IF,如:

IF NOT EXISTS (SELECT ...)
    INSERT INTO ...
于 2013-06-27T10:53:54.857 回答
1
if EXISTS (select * from AssetComponents where AssetTagNumber = @TagNo)

Begin

INSERT INTO AssetComponents(ComponentID, ComponentDescription)
(@ComponentType, @CompDescr)

End
于 2013-06-27T11:04:50.370 回答
0

用这个:

UPDATE AssetComponents     
Set ComponentID=@ComponentType, ComponentDescription=@CompDesc    
Where AssetTagNumber = @TagNo
于 2013-06-27T10:54:48.720 回答
0

WHERE子句有助于过滤记录,因此它最好与SELECTor一起使用UPDATE。因为INSERT我们通常使用IF NOT EXISTS从句。

请参阅示例:

  1. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/724ab6f3-413f-4c59-9b68-776f3ecfa899/insert-if-not-exists-into

  2. http://msdn.microsoft.com/en-us/library/ms174335.aspx

此外,在查看文档后,我们可以看到该INSERT语句支持WHERE子句。

如果记录已经存在,您可以执行UPDATE或者DELETE执行INSERT操作。

你可以试试:

IF NOT EXISTS (SELECT * FROM AssetComponents WHERE (AssetTagNumber = @TagNo))
 INSERT INTO AssetComponents(ComponentID, ComponentDescription) VALUES (@ComponentType, @CompDescr)
ELSE
 --UPDATE fields
于 2013-06-27T11:36:29.023 回答
0

考虑插入选择:

INSERT INTO AssetComponents(ComponentID, ComponentDescription)
SELECT [fill out here] AS ComponentID,
       [fill out here] AS ComponentDescription
FROM somesource
WHERE [condition]

这是 MS SQL Server 的一个特性,因此不适用于其他数据库。它有点要求您的数据已经在另一个表或您可以查询的其他源中。

于 2013-06-27T11:51:05.317 回答