发送给所有人而不是一个



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

Msg 512,级别 16,状态 1,第 20
行 子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<= 、>、>= 后面或子查询用作表达式时,不允许这样做。

Msg 515,级别 16,状态 2,第 35
行 无法将值 NULL 插入到"用户UID"列、表 'PS_Billing.dbo.Users_Product' 中;列不允许空值。插入失败。

这是我的查询:

DECLARE @UserID varchar(18), @UserUID bigint, @ItemID int,
        @ItemCount tinyint, @OrderNumber int, @BuyDate datetime, 
        @ProductCode varchar(20), @Slot tinyint, @empty smallint
-- Send Item to User Bank 
-- ----------- CONFIG  ------------------
-- UserID:
SET @UserID = 'Reset'
-- ItemID:
SET @ItemID = 100047
-- Item Count:
SET @ItemCount = 8
-- Produkt Description (max. 20 char.)
SET @ProductCode = ' '
-- --------------------------------------
SET @OrderNumber = 1
SET @BuyDate = GETDATE()
SET @UserUID = (SELECT UserUID 
                FROM PS_UserData.dbo.Users_Master 
                WHERE UserID <> @UserID)
SET @Slot = 0
SET @empty = -1
WHILE (@Slot <= 239)
BEGIN 
    SET @empty = (SELECT COUNT(Slot) 
                  FROM PS_Billing.dbo.Users_Product 
                  WHERE UserUID = @UserUID AND Slot = @Slot)
    IF (@empty <= 0) 
        BREAK
    ELSE  
        SET @Slot = @Slot+1
    END
    INSERT INTO PS_Billing.dbo.Users_Product (UserUID, Slot, ItemID, ItemCount, ProductCode, OrderNumber, BuyDate)
    VALUES (@UserUID, @Slot, @ItemID, @ItemCount, @ProductCode, @OrderNumber, @BuyDate)
    PRINT ''
    IF @Slot < 239 
       PRINT 'Used slot: '+CONVERT(varchar(3), @Slot)
    IF @Slot = 239 
       PRINT 'THERE IS NO FREE SLOT ANYMORE (240/240 SLOTS USED)!'
因此,我

正在尝试做的是一个查询,将列出的项目发送给我数据库中的所有玩家,而不仅仅是一个玩家。

我会回答你的第一个问题。

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

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

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

请使用这种方式。

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

正如其他人所提到的,您正在设置@userId,它期望单个值到几乎总是有可能返回多个的结构。那根本行不通。

话虽如此,您应该尽量避免声明性语言的命令式编程风格。我的意思是,你几乎总是可以使用while,而是使用joins来获得结果,这是语言的风格,而且总是更快

最新更新