【问题标题】:Get a value from one table and insert it in another SQL从一个表中获取一个值并将其插入另一个 SQL
【发布时间】:2013-02-07 06:50:43
【问题描述】:

我的存储过程是这样的

 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))

抛出错误

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

谁能告诉我出了什么问题?

【问题讨论】:

  • 您正在插入Notes 目标表,我认为您在值之后缺少from source 表名。

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


【解决方案1】:

您缺少FROM 子句:

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

系统看到一个表名或别名,但它不知道要绑定到什么。它可能只是假设您的意思是一个具有该名称的表,但 SQL 并不倾向于以假设的方式做太多事情。如果要使用表,最好将它放在FROM 子句中。

【讨论】:

  • 是的,这是我的失误,感谢您的帮助和 xtra 信息
【解决方案2】:

是的,我们可以在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 2014-03-24
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2014-07-20
    • 2014-07-29
    相关资源
    最近更新 更多