使用联接进行SQL更新?
我有两张桌子。一种是简单的字符串/ID查找: 标准表格: str_key String 0 'a' 1 'b'使用联接进行SQL更新?,sql,sql-server-2005,join,sql-update,Sql,Sql Server 2005,Join,Sql Update,我有两张桌子。一种是简单的字符串/ID查找: 标准表格: str_key String 0 'a' 1 'b' 那么,我如何修改它以包括查找带有字符串“a”的str_键?我想我需要加入,但我从未在更新中加入过。或者我可以在where子句中添加更多内容吗?这是您需要的语法: UPDATE v SET val = 2.124 FROM ValTable v INNER JOIN StringTable s
那么,我如何修改它以包括查找带有字符串“a”的str_键?我想我需要加入,但我从未在更新中加入过。或者我可以在where子句中添加更多内容吗?这是您需要的语法:
UPDATE v
SET val = 2.124
FROM ValTable v
INNER JOIN
StringTable s
ON v.str_key = s.str_key
WHERE s.String = 'a'
AND v.other_key = 1
IF @@ROWCOUNT = 0
BEGIN
INSERT
INTO ValTable
SELECT str_key, 1, 2.124
FROM StringTable
WHERE String = 'a'
END
David M的上述示例有效且有效。根据表的大小,您可能希望避免“盲更新”,因为这可能会导致非常大的表出现性能问题。请注意IF EXISTS()中的表提示
您的表没有DDL,但是假设str_键和other_键构成了您的ValTable的PK,您有“限制1”的原因吗?即使不是PK,在这里使用LIMIT似乎很奇怪我不确定它是否会导致在没有限制的情况下扫描整个表,但我想它足够聪明,知道复合键是键,并且只影响那一行。我如何修改第二行?我可以这样做吗:如果@ROWCOUNT=0,请插入v值(v.str_键,1,2.124),或者我需要使用另一个联接重新确定v.str_键吗?
UPDATE ValTable SET val = 2.124 WHERE str_key = 0 AND other_key = 1 LIMIT 1
IF @@ROWCOUNT=0 INSERT INTO ValTable VALUES (0,1,2.124);
UPDATE v
SET val = 2.124
FROM ValTable v
INNER JOIN
StringTable s
ON v.str_key = s.str_key
WHERE s.String = 'a'
AND v.other_key = 1
IF @@ROWCOUNT = 0
BEGIN
INSERT
INTO ValTable
SELECT str_key, 1, 2.124
FROM StringTable
WHERE String = 'a'
END
IF EXISTS(
SELECT
*
FROM
ValTable v WITH(NOLOCK)
INNER JOIN StringTable s WITH(NOLOCK) ON v.str_key = s.str_key
WHERE
s.String = 'a'
AND v.other_key = 1
)
BEGIN
UPDATE
v
SET
val = 2.124
FROM
ValTable v
INNER JOIN StringTable s ON v.str_key = s.str_key
WHERE
s.String = 'a'
AND v.other_key = 1
END
ELSE
BEGIN
INSERT INTO ValTable
--(You should define your columns here, You didn't provide a sample schema so I don't know what your columns are.)
--(Col1,COl2,COl3,etc...)
SELECT
str_key, 1, 2.124
FROM
StringTable
WHERE
String = 'a'
END