2013-05-09 155 views
0

我有两个学生的表(使用Microsoft SQL Server 2008 R2标准版)。我需要编写一个程序,因此,如果第一个表有新的学生,第二个得到以及SQL:从1个表插入新记录到另一个

这并不工作更新,我不知道为什么:

CREATE PROCEDURE [dbo].[CHECK_NEW] 


AS 
begin transaction 

declare @tempId int 
declare @tempName varchar 

DECLARE c1 CURSOR FOR 
SELECT kId, kName 
FROM table1 

OPEN c1 

FETCH NEXT FROM c1 
INTO @tempId, @tempName 

WHILE @@FETCH_STATUS = 0 
BEGIN 

if (SELECT sId FROM table2) NOT IN(@tempId) 
insert into table(sId, name) values(@tempId, @tempName) 

END 

commit 

在此先感谢

+1

“这不工作” - 不是一个有用的描述。顺便说一句,你不需要使用游标... – 2013-05-09 07:17:36

+0

@MitchWheat我只是没有添加任何东西,程序编译没有错误,但第二个表不更新wwhen我执行它,我不知道为什么 – user2336688 2013-05-09 07:20:00

+0

为什么你扫描沃尔表吗?为什么不添加一个触发器(有它自己的问题)或从代码插入 - >只保留一个地方添加到表1,然后启动一个txn并执行此操作。否则,你可能会遇到这样的情况,如果db在加载 – tgkprog 2013-05-09 07:24:02

回答

1

尝试像这样....

CREATE PROCEDURE [dbo].[CHECK_NEW] 


AS 
Begin Try 
begin transaction 
     Insert into Table2(ulid,Id,Name) 
    Select newid() as ulid, Id,name from (Select Row_Number() over(Partition by a.id order by a.id) as row, a.Id,a.name from Table1 a where 
not exists(Select * from Table2b where a.Id=b.Id)) t where row =1 
Commit 
End Try 
Begin Catch 
RollBack 
End Catch 
+0

问题是,第二个表有一个列“uId”为唯一标识符(第一个没有它),不允许为空,并且当添加值时,我调用我的函数newid ()来生成它。哇,我可以添加这个值,当我从选择插入? 我的意思是:插入表2(uId,Id,Name),而第一个值是从函数newid()和另外两个插入的? – user2336688 2013-05-09 07:25:27

+0

@ user2336688很难理解你想要什么? – 2013-05-09 07:27:18

+0

table2 has这些列:uId(由函数生成的一个随机值,不允许为空),id和Name。 uId不存在于第一个表格中,仅存在于第二个表格中。如果我按照你写的方式添加它,uId将保持为空,这不会工作。我怎样才能同时插入uId(同时调用函数newid()),从你写入的select中插入2个其他列? – user2336688 2013-05-09 07:30:25

相关问题