我们正在为ERP系统建立合作网站。他们有一个笔记表,我试图通过在T-SQL中编写脚本来移动到我们的笔记表中,因为有数百条记录。我正在使用SQL Server 2008R2。我不断得到一个与CHECK约束冲突的INSERT语句" ObjectNotesCk4"。冲突发生在数据库" PLT_NAMALT_App",table" dbo.ObjectNotes"错误。
一些细节。我们的ObjectNotes表需要来自PO的RowPointer,来自SpecificNotes表的PK,然后是我用常量填充的一些其他字段。首先,我使用游标从PO表中捕获RowPointer,然后插入与PO#匹配的SpecificNotes表,并尝试使用OUTPUT INTO临时表捕获PK。然后我尝试使用我在OUTPUT中插入的变量插入到ObjectNotes表中。所以我的查询......(只是一个FYI我将其限制为一个PO#,一行#用于验证)。
DECLARE @SpecificToken TABLE (SpecificTokenID TokenType, NoteContent OleObjectType, NoteDesc LongDescType)
DECLARE @RowPointer RowPointerType
DECLARE MY_CURSOR CURSOR
LOCAL STATIC FOR
SELECT RowPointer FROM poitem
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @RowPointer
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO SpecificNotes (NoteContent, NoteDesc)
OUTPUT inserted.SpecificNoteToken, inserted.NoteContent, inserted.NoteDesc
INTO @SpecificToken
SELECT LongNote, 'Visual Note'
FROM purc_line_notes vb
JOIN poline slp
ON vb.PONUM = slp.po_num
and vb.LINE_NO = po_line
WHERE slp.po_num = 'P000060883'
and slp.po_line = '1'
AND slp.rowpointer = @RowPointer
INSERT INTO ObjectNotes (RefRowPointer,NoteHeaderToken,SpecificNoteToken,NoteType)
VALUES (@OuterID, 5, (SELECT SpecificTokenID FROM @SpecificToken),0)
FETCH NEXT FROM MY_CURSOR INTO @RowPointer
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
同样在测试@SpecificToken中的值时,SpecificNoteToken为0但应为185(检查SpecificNotes表中的值)
在SpecificNotes中,SpecificNoteToken是主键,这就是我首先插入该表的原因。 在ObjectNotes中,ObjectNoteToken是主键,但SpecificNoteToken是外键。 RefRowPointer是poline表(slp)的外键。
这是我第一次使用OUTPUT INTO,我不确定这是正确的方法,因为我正在阅读有关能够使用主键的混合内容。我也为罗嗦道歉,我想确保彻底描述我的情况。