数据库中有一个名为table1的表,其中一个列称为“日期”。
select [date] from table1 where autoid=1
返回'1999-02-02 00:00:00.000'
当我跑步时:
update table1 set [date] = '2000-01-01 11:11:11.100' where autoid=1
然后:
select [date] from table1 where autoid=1
将返回'2000-01-01 00:00:00.000'
对于表中[date]列中的所有此类值,都会发生这种情况。
但是,如果我执行删除并为此表创建,则可以正常工作。这对我来说真是一个谜。
此数据库已经更改并随着时间的推移而发生变化,是否有限制此字段,然后创建会覆盖此限制等?
更新
当我运行查询以尝试仅将列更改为日期时(出于好奇心)
ALTER TABLE table1 alter column [date] date
我收到以下错误消息:
Msg 5074, Level 16, State 1, Line 91
The index 'paydate' is dependent on column 'date'.
Msg 4922, Level 16, State 9, Line 91
ALTER TABLE ALTER COLUMN date failed because one or more objects access this column.
在mssql mgmt studio中针对table1查找此索引并将脚本索引作为 - >创建到新窗口等给出:
/****** Object: Index [paydate] Script Date: 01/16/2018 9:44:58 AM ******/
CREATE NONCLUSTERED INDEX [paydate] ON [dbo].[table1]
(
[bking_id] ASC,
[date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
这可能是问题吗?
正如我之前提到的,如果我删除并重新创建表,则此问题不存在。我注意到当我在数据库的另一个副本中这样做时,大多数索引都会在此表中消失。
这个索引会做什么,为什么在执行drop和create时不重新创建?我猜索引对我来说是新的领域。
另一个更新:
所以我忽略了这个,因为在不同的dbs中丢弃和创建等。确实存在影响日期列的触发器:
CREATE TRIGGER [dbo].[tr_SetDatesToMidnight_table1] ON [dbo].[table1]
FOR INSERT, UPDATE Not For Replication
AS
UPDATE table1
SET table1.[date] = cast(convert(varchar, table1.[date], 112) as datetime)
FROM table1 JOIN Inserted
ON table1.autoid=Inserted.autoid
GO
但是,出于某种原因,丢弃此触发器不允许我按预期更新字段?
答案 0 :(得分:1)
我怀疑你的[Date]列的数据类型是datetime还是你有其他问题。你提到的Update工作正常。请在下面找到代码。
public void uploadFile(File file) {
DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
MediaType.TEXT_PLAIN_VALUE, true, file.getName());
try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
feignClient.uploadFile(multipartFile);
}