从一个表中获取值并将其插入另一个SQL中

时间:2013-02-07 06:50:43

标签: sql sql-server sql-server-2008

我的存储过程就像这样

 ALTER PROCEDURE [dbo].[kt_insernotes]
     (@DATASET  NVARCHAR (512)
      ,@ROWNUMBER INT
      ,@LASTCHANGED DATETIME
      ,@NOTESFILEID INT
      ,@NOTESRECID INT 
      ,@LINENUMBER NUMERIC (28, 12)
      ,@TXT  NVARCHAR (512)
      ,@DATE_   DATETIME 
      ,@USERID  INT   
    )
AS

INSERT INTO NOTES (DATASET
      ,ROWNUMBER
      ,LASTCHANGED
      ,NOTESFILEID
      ,NOTESRECID
      ,LINENUMBER
      ,TXT
      ,DATE_
      ,USERID)
values (@DATASET,@ROWNUMBER,@LASTCHANGED,@NOTESFILEID, (select ISP_EFAVORITLINE.ROWNUMBER where ISP_EFAVORITLINE.DATASET=(@DATASET)) ,@LINENUMBER ,@TXT,@DATE_,@USERID)
    RETURN

一切对我来说都很好,但这一行

(select ISP_EFAVORITLINE.ROWNUMBER where ISP_EFAVORITLINE.DATASET=(@DATASET))

抛出错误

  

Msg 4104,Level 16,State 1,Procedure kt_insernotes,Line 26
  无法绑定多部分标识符“ISP_EFAVORITLINE.DATASET”   消息4104,级别16,状态1,过程kt_insernotes,第26行
  无法绑定多部分标识符“ISP_EFAVORITLINE.ROWNUMBER”。

任何人都可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:3)

您错过了FROM条款:

(select ISP_EFAVORITLINE.ROWNUMBER from ISP_EFAVORITLINE where ISP_EFAVORITLINE.DATASET=(@DATASET))

系统正在查看表名或别名,并且它不知道绑定到什么意思。它可以只是假设你的意思是一个具有该名称的表,但SQL在假设方面并不会做太多。如果您想使用表格,最好将其放在FROM子句中。

答案 1 :(得分:0)

是的,我们可以在value子句中选择查询:

ALTER PROCEDURE [dbo].[kt_insernotes]
              (@DATASET  NVARCHAR (512)
              ,@ROWNUMBER INT
              ,@LASTCHANGED DATETIME
              ,@NOTESFILEID INT
              ,@NOTESRECID INT 
              ,@LINENUMBER NUMERIC (28, 12)
              ,@TXT  NVARCHAR (512)
              ,@DATE_   DATETIME 
              ,@USERID  INT   
            )
AS

INSERT INTO NOTES (DATASET
                  ,ROWNUMBER
                  ,LASTCHANGED
                  ,NOTESFILEID
                  ,NOTESRECID
                  ,TXT
                  ,DATE_
                  ,USERID
                  ,LINENUMBER
                 )
select @DATASET,
       @ROWNUMBER,
       @LASTCHANGED,
       @NOTESFILEID,
       @LINENUMBER,
       @TXT,
       @DATE_,
       @USERID,
       ISP_EFAVORITLINE.ROWNUMBER 
from ISP_EFAVORITLINE
where ISP_EFAVORITLINE.DATASET=(@DATASET)

RETURN