SQL:从1个表插入新记录到另一个
我有两个学生的表(使用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
在此先感谢
尝试像这样....
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
问题是,第二个表有一个列“uId”为唯一标识符(第一个没有它),不允许为空,并且当添加值时,我调用我的函数newid ()来生成它。哇,我可以添加这个值,当我从选择插入? 我的意思是:插入表2(uId,Id,Name),而第一个值是从函数newid()和另外两个插入的? – user2336688 2013-05-09 07:25:27
@ user2336688很难理解你想要什么? – 2013-05-09 07:27:18
table2 has这些列:uId(由函数生成的一个随机值,不允许为空),id和Name。 uId不存在于第一个表格中,仅存在于第二个表格中。如果我按照你写的方式添加它,uId将保持为空,这不会工作。我怎样才能同时插入uId(同时调用函数newid()),从你写入的select中插入2个其他列? – user2336688 2013-05-09 07:30:25
“这不工作” - 不是一个有用的描述。顺便说一句,你不需要使用游标... – 2013-05-09 07:17:36
@MitchWheat我只是没有添加任何东西,程序编译没有错误,但第二个表不更新wwhen我执行它,我不知道为什么 – user2336688 2013-05-09 07:20:00
为什么你扫描沃尔表吗?为什么不添加一个触发器(有它自己的问题)或从代码插入 - >只保留一个地方添加到表1,然后启动一个txn并执行此操作。否则,你可能会遇到这样的情况,如果db在加载 – tgkprog 2013-05-09 07:24:02