Sql 尝试在一个表中创建列并从另一个表设置其值

Sql 尝试在一个表中创建列并从另一个表设置其值,sql,Sql,我尝试向同一数据库中的表添加一个新列,然后尝试从另一个表的列复制新列 ALTER TABLE [library].[dbo].[Member$] add new_column1 float go update [library] .[dbo] .[Member$] set new_column1 = select [library].[dbo].Category$ .Category from [library] .[db

我尝试向同一数据库中的表添加一个新列,然后尝试从另一个表的列复制新列

ALTER TABLE [library].[dbo].[Member$]
        add  new_column1 float
        go
        update [library] .[dbo] .[Member$] 
        set new_column1  = select [library].[dbo].Category$ .Category  from  [library] .[dbo] .[Category$]  
        GO
    CREATE TABLE [dbo].[Category$](
        [CatID] [float] NULL,
        [Category] [nvarchar](255) NULL,
        [BooksLimit] [float] NULL,
        [Period] [float] NULL,
        [FinePerDay] [float] NULL
    ) ON [PRIMARY]
    
    GO

CREATE TABLE [dbo].[Member$](
    [Roll No] [float] NULL,
    [RollNo] [nvarchar](255) NULL,
    [Name] [nvarchar](255) NULL,
    [CatID] [nvarchar](255) NULL,
    [ExpiryDate] [datetime] NULL,
    [ExpiryReason] [nvarchar](255) NULL,
    [Session] [nvarchar](255) NULL,
    [new_column] [float] NULL,
    [new_column1] [float] NULL
) ON [PRIMARY]
但新的_column1仍然为空

类别中有多个值,但两个中的行号都不匹配,这是一个问题吗?如果是,那么如何实现这一点?

尝试以下方法:

ALTER TABLE [library].[dbo].[Member$] add new_column1 float 
go 
update [library] .[dbo] .[Member$] set 
  new_column1 = 
  (
    select TOP 1 [library].[dbo].[Category$].Category 
    from [library].[dbo].[Category$]
  )
但是

这样做,您只需将相同的值分配给表Member$中的所有行,如果您需要为每个Member$的行指定特定的设置,请尝试在子查询中放置适当的筛选

select TOP 1 [library].[dbo].[Category$].Category 
from [library].[dbo].[Category$]
WHERE PLACE_YOUR_FILTER_HERE
像这样:

但是,特别注意


如果您想将ID用于类别,最好使用一个精确的类型,例如int,因为浮点类型族不精确,因此比较困难。

在[category$]中有多少行?如果有多个,您将得到一个错误。如果有0,则所有行中都将有null。只有在[Category$]中只有一行时,查询才会工作。插入[library].[dbo].[Category$].[new_column1]值选择[library].[dbo].[Category$]中的[library].[dbo].[Category$]中有多个值,但两个值中的行号不匹配请使用表结构更新您的问题,两个表中的示例数据和所需结果。这仅复制第一行,是否可以使用insert命令?即使使用filter,也只有一个值将转到所有行。filter可以包含更新表中的列-因此-更新表中的每一行都可能不同。检查它。我将更新一个答案,向您展示如何根据您的模式设置不同的值来更新rowUpdated,并特别说明
ALTER TABLE [library].[dbo].[Member$] add new_column1 float 
go 
update [library] .[dbo] .[Member$] set 
  new_column1 = 
  (
    select TOP 1 [library].[dbo].[Category$].Category 
    from [library].[dbo].[Category$]
    WHERE [library] .[dbo] .[Member$].CatId = [library].[dbo].[Category$].CatId
  )