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
,否则您可能会得到错误的标识值。。。。