如何为另一个表中的每一行创建一行

时间:2016-01-19 13:31:00

标签: sql sql-server

我有一个Users表和一个Memberships表。用户可以拥有许多会员资格,每年有偿或无偿返还。我想为用户中的每个用户创建一个新的成员行,作为免费成员。

会员资格目前为空,因此我必须自动为每一行创建新的ID。

会员资格如下:

[Id]
[StartDateTime]
[EndDateTime]
[Frozen]
[MembershipType]
[PaidDateTime]

用户

[Id]
  ,[AspUserId]
  ,[Title]
  ,[Forename]
  ,[Surname]
  ,[Email]
  ,[Dob]
  ,[DateCreated]
  ,[AddressId]
  ,[PhoneNumber]
  ,[Gender]
  ,[Nationality]
  ,[WMSFPlayerId]
  ,[ProfileImageURL]
  ,[FavouriteGame]
  ,[Bio]
  ,[Username]
  ,[LastLogin]
  ,[WMSFPlayerId_Confirmed]
  ,[MembershipId]

会员资格:

  • ID将是新ID

  • StartDateTime将于今天

  • 结束日期时间为今天起一年

  • 冻结将为0

  • MembershipType将为0

  • PaidDateTime将为null

如何为用户中的每个用户在会员表中插入免费会员?我还必须使用为它们创建的新MembershipID更新Users表。

2 个答案:

答案 0 :(得分:2)

首先,我想指出您的表定义不支持每个用户拥有多个成员资格的要求。您现在拥有的是每个会员的多个用户。用户表不应包含MembershipID字段。应将其从User表中删除,并将UserID字段添加到Membership表中。一旦这样做了,

INSERT INTO Membership (Id, StartDateTime, EndDateTime, Frozen, MembershipType)
SELECT Id, GETDATE(), GETDATE(), 0, 'Free' FROM User

显然,您需要根据自己的要求更改值。

答案 1 :(得分:1)

您将使用insert . . . select。像这样:

insert into memberships(id, StartDate, EndDate, Frozen, MembershipType, PaidDateTime)
    select u.aspuserid, getdate(), dateadd(year, 1, getdate()), 0, 0, null
    from users u;