2011-06-07 47 views
0

我建立一个论坛,我有两个表:插入到两个表和Identity_Scope()

Threads 
------- 
ThreadID 
UsersID 
Date 
ThreadTitle 
ThreadParagraph 
ThreadClosed 


Topics 
----- 
TopicsID 
Theme 
Topics 
Date 

该线程ID被连接到用户表具有主键: Topics.TopicsID(PK)= = Threads.TopicID(FK)

首先我插入主题表格,然后插入线程表。我的目标是获得Topics.TopicID与Identity_Scope(标识),并把它传递给第二插件是Threads.TopicID

这里是我做了什么,但我不知道这是否是正确的:

StringBuilder insertCommand = new StringBuilder(); 
    insertCommand.Append("DECLARE @TopicsID int"); 
    insertCommand.Append("INSERT INTO Topics(Theme,Topics,Date)"); 
    insertCommand.Append("VALUES('@topic,@subTopic,GETDATE()')"); 
    insertCommand.Append("SET @TopicsID = SCOPE_IDENTITY()"); 

    insertCommand.Append("INSERT INTO Threads(UsersID,TopicsID,Date,ThreadTitle,ThreadParagraph,ThreadClosed)"); 
    insertCommand.Append("VALUES('@uniqueIdentifier,@TopicsID,GETDATE(),@questionTitle,@questionParagraph,0')"); 

我已经得到了用户按下或输入信息的控件获得的所有信息,所以不用担心。所有我担心的是从主题表传递相同的TopicID到线程表(列名:TopicID)。

+1

它是'SCOPE_IDENTITY',而不是'IDENTITY_SCOPE'。看到这个相关的问题:http://stackoverflow.com/q/42648/1583 – Oded 2011-06-07 08:47:25

+0

你需要声明变量@TopicSID – Magnus 2011-06-07 08:50:33

+0

'VALUES('@ topic,@ subTopic,GETDATE()''是绝对错误的 - 它缺少一个终止')',并且错过了传递单独值的事实,而不是'VALUES'子句中的'''分隔符“字符串。去除'VALUES'子句中的'''标记。 – 2011-06-07 09:25:49

回答

0

这两个Magnus & Damien_The_Unbeliever是正确的 - 你有几个语法错误(或错别字)。正确的插入命令应该是类似于

insertCommand.Append(@" 
      DECLARE @TopicSID int 

      INSERT INTO Topics(Theme,Topics,Date) 
      VALUES(@topic,@subTopic,GETDATE()) 

      SET @TopicSID = SCOPE_IDENTITY() 

      INSERT INTO Threads(UsersID,TopicsID,Date,ThreadTitle,ThreadParagraph,ThreadClosed) 
      VALUES(@uniqueIdentifier,@TopicSID ,GETDATE(),@questionTitle,@questionParagraph,0) 
    "); 
+0

我纠正了它。但是现在我得到:关键字'INTO'附近的语法不正确。 必须声明标量变量“@TopicsID”。 INSERT语句中的列数多于VALUES子句中指定的值。 VALUES子句中的值数量必须与INSERT语句中指定的列数相匹配。 – WithFlyingColors 2011-06-07 10:18:03