【问题标题】:insert multiple rows using subquery使用子查询插入多行
【发布时间】:2012-12-11 23:34:35
【问题描述】:

这是查询:

INSERT INTO qualification_lookup (variation, correct_qualification)
SELECT (SELECT Qualification FROM student WHERE Qualification like 'A%') ,'A-Level'

这是我尝试执行查询时遇到的错误。

消息 512,级别 16,状态 1,行 1 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。

如果有人告诉我任何替代方法,那么我是 SQL 新手。

【问题讨论】:

    标签: sql sql-server database


    【解决方案1】:
    INSERT INTO qualification_lookup (variation, correct_qualification) 
    select Qualification,'A-Level' from student   where Qualification like 'A%' 
    

    【讨论】:

      【解决方案2】:
          INSERT INTO qualification_lookup (variation, correct_qualification) 
      select Qualification, 'A-Level' from student where Qualification like 'A%'
      

      语法是否正确

      【讨论】:

        【解决方案3】:

        您需要考虑如何构建查询 - 考虑一下如果您只运行此代码会得到什么:

         SELECT (select Qualification from student where Qualification like 'A%') ,'A-Level'
        

        你得到的确切错误将是我的猜测 - 你有一个试图与单个字符串匹配的许多资格的列表 - 'A-level'。

        另一方面,这会很好用

         select Qualification, 'A-Level' from student where Qualification like 'A%'
        

        在我看来,INSERTUPDATE 语句的诀窍是编写一个 SELECT 语句来满足您的需求,然后将其包装起来

        INSERT INTO qualification_lookup (variation, correct_qualification) select Qualification, 'A-Level' from student where Qualification like 'A%'
        

        【讨论】:

          【解决方案4】:

          问题是这个子查询:

          select Qualification from student where Qualification like 'A%'
          

          返回几行。这就是您收到错误消息 512 的原因

          不需要使用它。

          这就够了:

          INSERT INTO qualification_lookup (variation, correct_qualification) 
          select Qualification, 'A-Level' as correct_qualification
          from student where Qualification like 'A%'
          

          【讨论】:

            【解决方案5】:
            declare @count int
            declare @index int = 1
            declare @currentQualificationId int = null
            
            set @count = (select distinct count(QualificationId) from Qualification  from  where 
            Qualification like 'A%')
            
            set @currentQualificationId = (SELECT QualificationId from (select QualificationId , 
            ROW_NUMBER() OVER (ORDER BY QualificationId) AS RowNumber from Qualification where 
            Qualification like 'A%') as Qualification
            where Qualification.RowNumber = @index) 
            
            
            while (@index <= @count)
             begin
            
                INSERT INTO qualification_lookup (variation, correct_qualification) 
                 values((select Qualification where QualificationId = 
                 @currentQualificationId),'A-Level')
            
                set @index = @index + 1
            
                 set @currentQualificationId = (SELECT QualificationId from (select 
                 QualificationId , ROW_NUMBER() OVER (ORDER BY QualificationId) AS RowNumber from 
                 Qualification where Qualification like 'A%') as Qualification
                 where Qualification.RowNumber = @index) 
            END
            

            【讨论】:

              猜你喜欢
              • 2011-03-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-03-25
              • 2012-09-26
              • 2023-03-28
              • 2011-08-01
              • 2015-01-03
              相关资源
              最近更新 更多