我尝试向同一个数据库中的表添加一个新列,然后我尝试从另一个表的列中复制新列。
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]
但new_column1仍为空
类别中有多个值,但两者中的行号不匹配,这是一个问题,如果是,那我该如何实现呢?
答案 0 :(得分:2)
试试这个:
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$]
)
<强> BUT 强>
这样做你只需为表Member $中的所有行分配相同的值,如果你需要为每个Member $行设置特定的设置 - 尝试在子查询中放置适当的过滤
select TOP 1 [library].[dbo].[Category$].Category
from [library].[dbo].[Category$]
WHERE PLACE_YOUR_FILTER_HERE
喜欢这样:
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
)
但是,特别说明
如果您想将ID用于类别 - 请更好地使用其中的确切类型,例如int
- 因为FLOAT
类型系列不准确,因此 - 难以比较。