2011-03-16 21 views
0

我有使用一個SqlDataSource更新命令的Asp的GridView使用兩個表

加入SIMStransactionlog和顯示在一個天冬氨酸的GridView然後,我有一個ASP的GridView具有以下選擇兩個表之間的連接和update語句:

SelectCommand="SELECT * FROM sims s INNER JOIN TransactionLog AS tl ON s.id = tl.SimsId"  
UpdateCommand="UPDATE SET [email protected] FROM sims s INNER JOIN TransactionLog AS tl ON s.id = tl.SimsId WHERE [email protected] and [email protected]" 

現在我只有Notes列不設置爲只讀,但想以後儘快加入別人,因爲我可以得到更新語句爲備註欄工作第一。

當我嘗試更新的備註欄中,我得到的錯誤如下:關鍵字「SET」]

嗯,近 不正確的語法希望我的問題是明確提出足夠。

+0

給了邁克的學分,因爲他幫我出最。最後,我剛剛解決了一個存儲過程,它工作。 – n4rzul 2011-03-31 10:42:36

回答

1

這就是你如何編寫和SQL UPDATE聲明與FROM子句。

drop table t2 
drop table t1 
go 

create table t1 (
Id int not null identity(1,1) primary key, 
Name varchar(50) null 
) 

create table t2 (
t1Id int not null foreign key references t1(id), 
Name varchar(50) null 
) 

insert into t1(name) values('T1Test1') 
insert into t1(name) values('T1Test2') 
insert into t2(t1Id, name) values(1, 'T2Test1') 
insert into t2(t1Id, name) values(2, 'T2Test2') 

-- Have a look at the data 
select * from t1 inner join t2 on t1.Id = t2.t1Id 

update t2 
set t2.Name = 'T2Test1_changed' 
from t2 inner join t1 on t2.t1Id = t1.Id 
where t1.Id = 1 

-- See the changes 
select * from t1 inner join t2 on t1.Id = t2.t1Id 

這意味着你的說法應該是這樣的:

UPDATE sims 
SET s.Notes = @Notes 
FROM sims s INNER JOIN TransactionLog tl ON s.id = tl.SimsId 
WHERE s.id = @id and tl.Id = @Id1 

我卻懷疑WHERE條款。也許沒有必要在那裏使用兩個ID,但只有你知道這一點。

在將SQL Management Studio應用到您的應用程序中以獲得更好的調試體驗之前,請嘗試在SQL Management Studio中進行查詢。

這裏是關於UPDATE聲明MSDN文檔:http://msdn.microsoft.com/en-us/library/ms177523.aspx

+0

所以,如果我想更新連接兩邊的列,我就搞定了?這聽起來不對? – n4rzul 2011-03-16 10:27:47

+0

Mike,本文在更新語句中使用內部聯接就好了。它的問題以及爲什麼它不太對我來說是正確的,它只是更新「左」表中的字段而不是兩個字段。我試圖讓Ben Nadels在左右桌的領域工作,但無法讓它工作。繼承人的文章:http://www.bennadel.com/blog/938-Using-A-SQL-JOIN-In-A-SQL-UPDATE-Statement-Thanks-John-Eric-.htm – n4rzul 2011-03-16 11:04:49

+0

你是對的!您可以直接在'UPDATE'語句中使用'FROM'子句,但似乎只能更新一個表。我已經添加了一個例子。 – 2011-03-16 11:30:11

相關問題