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 . . . 只需将偏移量添加到行号上即可。