您可以在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,然后使用此键为该记录插入另一个条目
再次道歉
答案 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
子句仅适用于SELECT
,UPDATE
或DELETE
。
要检查您是否需要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
子句有助于过滤记录,因此最好使用SELECT
或UPDATE
。对于INSERT
,我们通常使用IF NOT EXISTS
子句。
参见示例:
此外,在looking at documentation之后,我们可以看到INSERT
语句对WHERE
子句的 NO 支持。
如果记录已存在,您可以通过UPDATE
操作执行DELETE
或INSERT
。
您可以尝试:
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的专长,因此无法在其他数据库中使用。它需要您的数据已经在另一个表或您可以查询的其他源中。