Sql 如何将标识为off的行id激活
我在进行选择时出现此错误Sql 如何将标识为off的行id激活,sql,.net,sql-server,stored-procedures,rdbms,Sql,.net,Sql Server,Stored Procedures,Rdbms,我在进行选择时出现此错误 DECLARE @TopID INT SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions]; SELECT @TopID = @TopID + 1 ,[questiontext] ,[DeptID] ,[SurveyID] FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80 不能使
DECLARE @TopID INT
SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions];
SELECT
@TopID = @TopID + 1
,[questiontext]
,[DeptID]
,[SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80
不能使用为变量赋值的SELECT语句
与数据检索操作相结合
我知道有可能在标识设置为ON时修复此错误。但我不希望由于我的db托管在legecy应用程序中,因此更改此设置会导致其他问题中断。这与标识无关。这与选择
有关。你有:
SELECT @TopID = @TopID + 1,
[questiontext], [DeptID], [SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions]
WHERE surveyid = 80
它有一个赋值,并返回值。我想你真的想要:
SELECT @TopId + (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) as rownum,
[questiontext], [DeptID], [SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions]
WHERE surveyid = 80;
注意:如果您确实希望结果按特定顺序排列,则向查询和行编号()中添加一个orderby
,这与标识无关。这与选择有关。你有:
SELECT @TopID = @TopID + 1,
[questiontext], [DeptID], [SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions]
WHERE surveyid = 80
它有一个赋值,并返回值。我想你真的想要:
SELECT @TopId + (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) as rownum,
[questiontext], [DeptID], [SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions]
WHERE surveyid = 80;
注意:如果您确实希望结果按特定顺序排列,则在查询和行号()中添加一个order BY
,这是您选择的方式,您不能在select中使用运算符来获取其他列。看看这个,看看你做错了什么
我认为你真正需要的是:
DECLARE @TopID INT
SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions];
SELECT
@TopID + 1
,[questiontext]
,[DeptID]
,[SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80
编辑:
或基于行数的解决方案,如:
DECLARE @TopID INT
SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions];
SELECT
@TopID + ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as TopID
,[questiontext]
,[DeptID]
,[SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80
对上一个答案稍加改进(合并到一个查询中):
另一种选择是,梳理两个查询:
SELECT
(SELECT MAX(ID) FROM ForgeRock) as MAx_Id
, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as Row_ID,
(SELECT TOP 1 ID FROM ForgeRock ORDER BY Id DESC) +
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as New_Id,
productName,
description
FROM
ForgeRock
这是您选择的方式,您不能在select中使用运算符来提取其他列。看看这个,看看你做错了什么
我认为你真正需要的是:
DECLARE @TopID INT
SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions];
SELECT
@TopID + 1
,[questiontext]
,[DeptID]
,[SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80
编辑:
或基于行数的解决方案,如:
DECLARE @TopID INT
SELECT @TopID = MAX([QuestionId]) from [SurveyQuestions];
SELECT
@TopID + ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as TopID
,[questiontext]
,[DeptID]
,[SurveyID]
FROM [SOSS].[dbo].[SurveyQuestions] where surveyid =80
对上一个答案稍加改进(合并到一个查询中):
另一种选择是,梳理两个查询:
SELECT
(SELECT MAX(ID) FROM ForgeRock) as MAx_Id
, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as Row_ID,
(SELECT TOP 1 ID FROM ForgeRock ORDER BY Id DESC) +
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as New_Id,
productName,
description
FROM
ForgeRock
不包括..它只是在所有行中显示相同的topid..我想在每行中增加topid仍然相同的topid变量在所有行中都有相同的值,我想让它增加不包括..它只是在所有行中显示相同的topid..我想在每行中增加topid仍然相同的topid变量在所有行中都有相同的值,我想让它递增我想让这个行号从TopID开始递增,TopID是id的最大值,现在它从1开始递增,而TopID不是correct@SmartestVEGA . . . 只需将偏移量添加到行号上。我希望此行号从TopID(id的最大值)递增,现在它从1(不是)递增correct@SmartestVEGA . . . 只需将偏移量添加到行号上即可。