C# 存储过程中的问题

C# 存储过程中的问题,c#,sql-server,tsql,C#,Sql Server,Tsql,这里我想从表QuestionEntry中检索questionid,并将该questionid用于另一个表Answer 但这不起作用 那么,我如何使用上述方法 请帮我,而不是帮我 create procedure InsertQuestionEntry @round_name varchar(40), @question varchar(100), @answer varchar(40), @option1 varchar(20), @option2 varchar(30), @option3 v

这里我想从表
QuestionEntry
中检索
questionid
,并将该
questionid
用于另一个表
Answer

但这不起作用

那么,我如何使用上述方法

请帮我,而不是帮我

create procedure InsertQuestionEntry
@round_name varchar(40),
@question varchar(100),
@answer varchar(40),
@option1 varchar(20),
@option2 varchar(30),
@option3 varchar(30)

as
begin
insert into QuestionEntry(Question,Round_Name) values(@question,@round_name);
declare @quesion_id int

exec @quesion_id= select Question_ID from QuestionEntry;

insert into Answer(Question_ID,Answer,Option1,Option2,Option3) values(@quesion_id,@answer,@option1,@option2,@option3);
end
使用以下命令:

insert into QuestionEntry(Question,Round_Name) values(@question,@round_name);
declare @quesion_id int

exec @quesion_id= select Question_ID from QuestionEntry;
而不是

create procedure InsertQuestionEntry
@round_name varchar(40),
@question varchar(100),
@answer varchar(40),
@option1 varchar(20),
@option2 varchar(30),
@option3 varchar(30)

as
begin
insert into QuestionEntry(Question,Round_Name) values(@question,@round_name);
declare @quesion_id int

exec @quesion_id= select Question_ID from QuestionEntry;

insert into Answer(Question_ID,Answer,Option1,Option2,Option3) values(@quesion_id,@answer,@option1,@option2,@option3);
end
使用以下命令:

insert into QuestionEntry(Question,Round_Name) values(@question,@round_name);
declare @quesion_id int

exec @quesion_id= select Question_ID from QuestionEntry;
你不应该在那里使用

exec所做的是:

执行命令字符串或字符 Transact-SQL批处理中的字符串,或 以下模块之一:系统 存储过程,用户定义的存储过程 过程,标量值用户定义 函数,或扩展存储 程序

您应该使用“set”或“select”而不是exec

SET
一次只能分配一个变量 一次,
SELECT
可以进行多次 立即完成作业。分配时 如果没有值,则从查询中删除 然后返回
SET
将分配
NULL
,其中
SELECT
将不起作用 赋值(所以变量 不会从以前的版本更改 价值)

您可以在此处找到有关何时使用设置或选择的更多信息:

样本:

DECLARE @quesion_id int
INSERT INTO QuestionEntry(Question,Round_Name) values(@question,@round_name)
SET @quesion_id = SCOPE_IDENTITY()
SELECT @quesion_id = @@IDENTITY
--or
SELECT @quesion_id = SCOPE_IDENTITY()
但这也是从插入的记录中获取标识值的错误方法。如果有N个用户同时执行同一过程,则可能会得到错误的值(从上次插入的记录中)

要做到这一点,你应该使用或更好。更多信息:

插入后,您只需调用:

set @quesion_id = (select Question_ID from QuestionEntry)
select @quesion_id = (select Question_ID from QuestionEntry)
此外,请检查您的问题ID是否配置正确。应将其设置为自动增量

样本:

DECLARE @quesion_id int
INSERT INTO QuestionEntry(Question,Round_Name) values(@question,@round_name)
SET @quesion_id = SCOPE_IDENTITY()
SELECT @quesion_id = @@IDENTITY
--or
SELECT @quesion_id = SCOPE_IDENTITY()
IDENTITY关键字后面的1表示种子编号(表中第一条记录的值)和增量属性(0或1)。

不应在其中使用

exec所做的是:

执行命令字符串或字符 Transact-SQL批处理中的字符串,或 以下模块之一:系统 存储过程,用户定义的存储过程 过程,标量值用户定义 函数,或扩展存储 程序

您应该使用“set”或“select”而不是exec

SET
一次只能分配一个变量 一次,
SELECT
可以进行多次 立即完成作业。分配时 如果没有值,则从查询中删除 然后返回
SET
将分配
NULL
,其中
SELECT
将不起作用 赋值(所以变量 不会从以前的版本更改 价值)

您可以在此处找到有关何时使用设置或选择的更多信息:

样本:

DECLARE @quesion_id int
INSERT INTO QuestionEntry(Question,Round_Name) values(@question,@round_name)
SET @quesion_id = SCOPE_IDENTITY()
SELECT @quesion_id = @@IDENTITY
--or
SELECT @quesion_id = SCOPE_IDENTITY()
但这也是从插入的记录中获取标识值的错误方法。如果有N个用户同时执行同一过程,则可能会得到错误的值(从上次插入的记录中)

要做到这一点,你应该使用或更好。更多信息:

插入后,您只需调用:

set @quesion_id = (select Question_ID from QuestionEntry)
select @quesion_id = (select Question_ID from QuestionEntry)
此外,请检查您的问题ID是否配置正确。应将其设置为自动增量

样本:

DECLARE @quesion_id int
INSERT INTO QuestionEntry(Question,Round_Name) values(@question,@round_name)
SET @quesion_id = SCOPE_IDENTITY()
SELECT @quesion_id = @@IDENTITY
--or
SELECT @quesion_id = SCOPE_IDENTITY()

IDENTITY关键字后面的1表示种子编号(表中第一条记录的值)和增量属性(0或1)。

如果您的服务器版本是SQL server 2005或更高版本,您也可以尝试以下操作:

Question_ID int IDENTITY(1,1)PRIMARY KEY CLUSTERED

如果服务器的版本为SQL server 2005或更高版本,也可以尝试以下操作:

Question_ID int IDENTITY(1,1)PRIMARY KEY CLUSTERED

什么不起作用?您收到错误消息了吗?什么不起作用?您收到错误消息了吗?实际上,您应该使用
SCOPE\u IDENTITY()
而不是
@@IDENTITY
,否则您可能会得到错误的标识值…实际上,您应该使用
SCOPE\u IDENTITY()
而不是
@@IDENTITY
,否则您可能会得到错误的标识值。。。。