Bir SQL Server'da tablo BİRLEŞTİRME kullanarak güncelleme?
Bir tablo diğer tablo birleştirme yaparken örneğin: bir sütun güncellemek istiyorum
UPDATE table1 a
INNER JOIN table2 b ON a.commonfield = b.[common field]
SET a.CalculatedColumn= b.[Calculated Column]
WHERE
b.[common field]= a.commonfield
AND a.BatchNO = '110'
Ama şikayetçi :
15, 1, 2 Satır Devlet Hata 170
Hat 2: yakınında Yanlış sözdizimi 'bir'.
Burada yanlış olan nedir?
CEVAP
Oldukça SQL Sunucu UPDATE FROM
özel sözdizimi aşağı yok. Ayrıca CommonField
katılmak ve aynı zamanda daha sonra filtre için neden ihtiyaç duyduğunu bilmiyorum. Bunu deneyin:
UPDATE t1
SET t1.CalculatedColumn = t2.[Calculated Column]
FROM dbo.Table1 AS t1
INNER JOIN dbo.Table2 AS t2
ON t1.CommonField = t2.[Common Field]
WHERE t1.BatchNo = '110';
Eğer yaptığın şey gerçekten aptal gibi sürekli çalışan set değeri bir sütun için toplam başka bir sütun (ihlal prensibi kaçınarak saklamak gereksiz verileri) kullanabilirsiniz a CTE (common table expression):
;WITH t2 AS
(
SELECT [key], CalculatedColumn = SUM(some_column)
FROM dbo.table2
GROUP BY [key]
)
UPDATE t1
SET t1.CalculatedColumn = t2.CalculatedColumn
FROM dbo.table1 AS t1
INNER JOIN t2
ON t1.[key] = t2.[key];
Bu gerçekten saçma olmasının nedeni, yeniden çalıştırmak tüm bu güncelleme table2
herhangi bir satır değişiklikleri her zaman olacak. SUM
her zaman çalışma zamanında hesaplamak ve, bunu yaparken, asla sonuç bayat endişelenmenize gerek bir şey değildir.