带有WHERE语句的SQL INSERT INTO语句

时间:2013-06-27 10:49:46

标签: c# asp.net sql sql-server

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

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

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

但编译器遇到了WHERE语句的问题。

感谢

** * 更新 * < / EM> ***

这是我目前使用的完整代码和修订

   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,然后使用此键为该记录插入另一个条目

再次道歉

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

你不能有条件地插入&#34;像那样。 WHERE子句仅适用于SELECTUPDATEDELETE

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

IF NOT EXISTS (SELECT ...)
    INSERT INTO ...

答案 2 :(得分:1)

if EXISTS (select * from AssetComponents where AssetTagNumber = @TagNo)

Begin

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

End

答案 3 :(得分:0)

使用此:

UPDATE AssetComponents     
Set ComponentID=@ComponentType, ComponentDescription=@CompDesc    
Where AssetTagNumber = @TagNo

答案 4 :(得分:0)

WHERE子句有助于过滤记录,因此最好使用SELECTUPDATE。对于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.   
  3. http://msdn.microsoft.com/en-us/library/ms174335.aspx

  4.   

此外,在looking at documentation之后,我们可以看到INSERT语句对WHERE子句的 NO 支持。

如果记录已存在,您可以通过UPDATE操作执行DELETEINSERT

您可以尝试:

IF NOT EXISTS (SELECT * FROM AssetComponents WHERE (AssetTagNumber = @TagNo))
 INSERT INTO AssetComponents(ComponentID, ComponentDescription) VALUES (@ComponentType, @CompDescr)
ELSE
 --UPDATE fields

答案 5 :(得分:0)

考虑INSERT SELECT:

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

这是MS SQL Server的专长,因此无法在其他数据库中使用。它需要您的数据已经在另一个表或您可以查询的其他源中。