发送给所有人而不是一个

时间:2016-02-06 18:35:43

标签: sql sql-server

我是SQL Server的新手,我正在尝试运行以下查询,但是我收到以下错误

  

Msg 512,Level 16,State 1,Line 20
  子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

     

Msg 515,Level 16,State 2,Line 35
  无法将值NULL插入列'UserUID',表'PS_Billing.dbo.Users_Product';列不允许空值。 INSERT失败。

这是我的问题:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

所以,我想要做的是一个查询,它将列出的项目发送给我的数据库中的所有玩家,而不仅仅是一个。

3 个答案:

答案 0 :(得分:1)

我会回答你的第一个。

SET @UserUID = (SELECT UserUID 
                FROM PS_UserData.dbo.Users_Master 
                WHERE UserID <> @UserID)

右边的查询几乎可以保证返回多个值。

您只能为标量变量分配单个值,例如@UserUID

答案 1 :(得分:0)

请使用这种方式。

SELECT TOP 1 @UserUID = UserUID 
                FROM PS_UserData.dbo.Users_Master 
                WHERE UserID <> @UserID

答案 2 :(得分:0)

正如其他人提到的那样,你设置@userId,它期望单个值到结构,几乎总是有可能返回多个。这简直不会奏效。

话虽如此,您应该尝试避免声明性语言的命令式编程风格。 我的意思是,您几乎总是可以使用while并使用joins来实现结果,这是语言的风格,并且始终更快