此输出语句(SQL Server 2005)的语法有什么问题?
我试图在存储过程中使用OUTPUT语句来返回新插入行的ID。存储过程是:此输出语句(SQL Server 2005)的语法有什么问题?,sql,sql-server-2005,tsql,stored-procedures,Sql,Sql Server 2005,Tsql,Stored Procedures,我试图在存储过程中使用OUTPUT语句来返回新插入行的ID。存储过程是: CREATE PROCEDURE PROC_RESTORE_REQUEST_TO_QUEUE @cs_uri_stem varchar(900), @cs_uri_query varchar(2500), @date datetime, @time datetime, @queue_state smallint, @process_id int, @simulatio
CREATE PROCEDURE PROC_RESTORE_REQUEST_TO_QUEUE
@cs_uri_stem varchar(900),
@cs_uri_query varchar(2500),
@date datetime,
@time datetime,
@queue_state smallint,
@process_id int,
@simulation_start_time bigint,
@num_failures smallint
AS
SET NOCOUNT ON
INSERT INTO [DD#WORK].[dbo].[ebhFifoQueue] ([cs-uri-stem],[cs-uri-query],[date],[time],[queue_state],[process_id],[simulation_start_time],[num_failures])
VALUES (@cs_uri_stem,@cs_uri_query,@date,@time,@queue_state,@process_id,@simulation_start_time,@num_failures)
OUTPUT INSERTED.id
尝试编译此存储过程时,会收到一条错误消息:
“输出”附近的语法不正确
我尝试了几次对这段代码的排列,但都没有效果(相同的错误消息),包括将输出语句移动到与INSERT语句相同的行上。你知道我的语法有什么问题吗?提前感谢您的帮助 -Eric来自MSDN
DECLARE @MyTableVar table( NewScrapReasonID smallint,
Name varchar(50),
ModifiedDate datetime);
INSERT Production.ScrapReason
OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
INTO @MyTableVar
VALUES (N'Operator error', GETDATE());
这是命令。应介于插入的和值之间
移动你的,就像这样:
INSERT INTO [DD#WORK].[dbo].[ebhFifoQueue] ([cs-uri-stem],[cs-uri-query],[date],[time],[queue_state],[process_id],[simulation_start_time],[num_failures])
OUTPUT INSERTED.id
VALUES (@cs_uri_stem,@cs_uri_query,@date,@time,@queue_state,@process_id,@simulation_start_time,@num_failures)
我认为应该是这样的:
INSERT INTO [DD#WORK].[dbo].[ebhFifoQueue] ([cs-uri-stem],[cs-uri-query],[date],[time],[queue_state],[process_id],[simulation_start_time],[num_failures])
OUTPUT INSERTED.id
VALUES
(@cs_uri_stem,@cs_uri_query,@date,@time,@queue_state,@process_id,@simulation_start_time,@num_failures)
您还可以在OUPUT语句之后添加“INTO@MyVariable”或“INTO MyTable”应该类似于:
CREATE PROCEDURE PROC_RESTORE_REQUEST_TO_QUEUE
@cs_uri_stem varchar(900),
@cs_uri_query varchar(2500),
@date datetime,
@time datetime,
@queue_state smallint,
@process_id int,
@simulation_start_time bigint,
@num_failures smallint,
@new_id int OUTPUT
AS
SET NOCOUNT ON
INSERT INTO [DD#WORK].[dbo].[ebhFifoQueue] ([cs-uri-stem],[cs-uri-query],[date],[time],[queue_state],[process_id],[simulation_start_time],[num_failures])
VALUES (@cs_uri_stem,@cs_uri_query,@date,@time,@queue_state,@process_id,@simulation_start_time,@num_failures)
SET @new_id = SCOPE_IDENTITY()
如果以后要使用输出变量,最好将其输出到表变量(如果您希望插入/更新/删除多行)或变量(如果您使用的语法只保证一条记录)。我认为如果您只返回一个值,则使用ouput参数(请参阅我的答案)从T-SQL或C#之类的语言中使用会更容易一些。