我遇到了很大的麻烦,我想编写一个包含条件语句的 SQL 查询。
EG:我有一个带有列的 SQL 表,ID,NAME,STATUS
因此在将值插入该表之前,我想检查表中已经存在的名称。如果它存在,那么我想更新状态值。
是否可以使用 queryString(SQL Server 查询而不是存储过程)方法编写查询,如果有人知道请帮助我。我正在使用 SQL Server 2008 R2
我遇到了很大的麻烦,我想编写一个包含条件语句的 SQL 查询。
EG:我有一个带有列的 SQL 表,ID,NAME,STATUS
因此在将值插入该表之前,我想检查表中已经存在的名称。如果它存在,那么我想更新状态值。
是否可以使用 queryString(SQL Server 查询而不是存储过程)方法编写查询,如果有人知道请帮助我。我正在使用 SQL Server 2008 R2
您想要MERGE
查询语法
从文档(http://technet.microsoft.com/en-us/library/bb510625.aspx)
MERGE Production.UnitMeasure AS target
USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
ON (target.UnitMeasureCode = source.UnitMeasureCode)
WHEN MATCHED THEN
UPDATE SET Name = source.Name
WHEN NOT MATCHED THEN
INSERT (UnitMeasureCode, Name)
VALUES (source.UnitMeasureCode, source.Name)
OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable
以下是可能的方法:
1)使用'EXISTS'方法
IF EXISTS(SELECT 1 FROM Table1 WHERE Name = @Name)
UPDATE Table1 SET Status = @Status WHERE Name = @Name
ELSE
INSERT INTO Table1 (Name, Status) VALUES(@Name, @Status)
2)使用合并
MERGE Table1 AS TARGET
USING (SELECT @Name, @Status FROM Table1) AS Source (Name, Status)
ON (TARGET.Name = Source.Name)
WHEN MATCHED
THEN UPDATE SET Status = Source.Status
WHEN NOT MATCHED
THEN INSERT (Name, Status) VALUES (Source.Name, Source.Status)
3)未编译的查询(构建查询)
--Unable to post on S.O.F due to security limitations
虽然建议的方法是第 1 和第 2 (第 3 是不必要的)。
你想要类似的东西
IF EXISTS (SELECT Name FROM YourDatabase WHERE [_SomeCondition_])
BEGIN
INSERT INTO YourTable (Status)
SELECT OtherStatus AS Status
FROM SomeOtherTable
END
就是这样。
我希望这有帮助。