我的存储过程就像这样
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”。
任何人都可以告诉我出了什么问题吗?
答案 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