我有一个名为 MyTable 的表格,是通过以下方式创建的
CREATE TABLE MyTable
(
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Type] [int] NOT NULL,
[CreatedDate] [datetime] NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
)
我想要检查一张表中是否存在某列,如果存在,就将数据复制到另一列中,然后删除旧的列,操作如下:
IF (SELECT COLUMNPROPERTY(OBJECT_ID('MyTable'), 'Timestamp', 'Precision')) IS NOT NULL
BEGIN
UPDATE [dbo].[MyTable]
SET [CreatedDate] = [Timestamp]
ALTER TABLE [dbo].[MyTable]
DROP COLUMN [Timestamp]
END
GO
然而,当我尝试运行它时,我遇到了一个错误:
Invalid column name 'Timestamp'
我该如何完成我想做的事情?
select columnproperty(...)
子查询返回什么?我猜它不是空值,所以你的更新运行了,由于时间戳确实不存在,所以你得到了那个错误。 - Marc Bif()
在存储过程解析并检查表中是否有Timestamp
字段时不会起作用。您必须使用动态 SQL 来完成。例如:sql = 'UPDATE ..'; exec @sql
这样的东西。 - Marc B