所以這裏是一個方法:
1.) Do a equi join
Table1
FirstName LastName PrimaryKey
Jay Donner 1
Steven Woods 2
Bruce Beard 3
Table2
Firstname LastName PrimaryKey
Jay Donner 1
Steven Wood 2
Bruce Bears 3
所以內連接
Select A.FirstName,A.LastName,A.PrimaryKey
From Table1 A INNER JOIN Table2 B
On A.FirstName = B.FirstName
AND A.LastName = B.LastName
現在的結果集將匹配字段 傑伊·唐納1
既然你想找到與 不匹配的字段可以使用'not in'命令使用子查詢,如下所示:
Select A.FirstName,A.LastName,A.PrimaryKey
From Table1 A INNER JOIN Table2 B
ON A.PrimaryKey =B.PrimaryKey
Where A.PrimaryKey NOT IN (
Select A.PrimaryKey
From Table1 A INNER JOIN Table2 B
On A.FirstName = B.FirstName
AND A.LastName = B.LastName
)
因此,上面的查詢指出:找到主鍵匹配並且屬性與名字和姓氏字段中的值不匹配的東西。
Steven Woods 2
Bruce Bear 3
現在您知道需要更新的主鍵。接下來,用update語句遍歷表。光標是一塊蛋糕,但我想有人告訴你在這裏使用CTE遞歸。祝你好運......這就是我討厭SQL的原因。 這是一個使用遊標遞歸的例子...因此,我個人將使用Entity Framework的c#執行此任務,並將其作爲可執行命令與SSIS包一起包裝在我的SQL Server中。 反正!下面是迭代。
這裏的示例代碼沒有評論。
申報@fname如爲nvarchar(50)
Declare @LName as nvarchar(100)
聲明@PrimaryKeyas詮釋
Declare PersonCursor CURSOR FAST_FORWARD FOR
Select A.FirstName,A.LastName,A.PrimaryKey
From Table1 A INNER JOIN Table2 B
ON A.PrimaryKey =B.PrimaryKey
Where A.PrimaryKey NOT IN (
Select A.PrimaryKey
From Table1 A INNER JOIN Table2 B
On A.FirstName = B.FirstName
AND A.LastName = B.LastName
)
OPEN PersonCursor
FETCH NEXT FROM PersonCursor
INTO @FName, @LName, @Email
WHILE @@FETCH_STATUS = 0
BEGIN
-- do row specific stuff here
UPDATE table2
SET [EmployeeIdentification]= @Fname, [email protected]
WHERE [email protected]
FETCH NEXT FROM PersonCursor
INTO @FName, @LName, @Email
END
CLOSE PersonCursor
DEALLOCATE PersonCursor
出於好奇,你爲什麼不使用像NHibernate的或實體框架的ORM,因爲他們會解決這些問題給你。 – Dai
@Dai因爲我有6個星期的時間來編寫一個相當龐大的數據應用程序,並且在記錄所有內容時編寫一份報告來啓動。所以我沒有考慮過。這是一個原型,所以我可以隨時切換到實體或nHibernate^_^ – OmniOwl