我有一个由MyTable创建的表
CREATE TABLE MyTable
(
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Type] [int] NOT NULL,
[CreatedDate] [datetime] NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)
我想检查我的表中是否存在列,如果存在,我想将数据复制到不同的列,然后删除旧列,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行它时,我收到一个错误:
Invalid column name 'Timestamp'
Run Code Online (Sandbox Code Playgroud)
我怎样才能完成我想要做的事情?
这是一个汇编问题.
如果在编译批处理时该表不存在,则所有工作正常,因为引用该表的语句将受延迟编译的影响.但是对于预先存在的表,您将尝试编译不存在的列中的所有语句和空白时遇到此问题.
您可以将代码推送到子批处理中,以便仅在命中该分支时进行编译.
IF (SELECT COLUMNPROPERTY(OBJECT_ID('MyTable'), 'Timestamp', 'Precision')) IS NOT NULL
BEGIN
EXEC('
UPDATE [dbo].[MyTable]
SET [CreatedDate] = [Timestamp]
ALTER TABLE [dbo].[MyTable]
DROP COLUMN [Timestamp]
')
END
GO
Run Code Online (Sandbox Code Playgroud)
如果您只是想重命名该列
EXEC sys.sp_rename 'dbo.MyTable.[TimeStamp]' , 'CreatedDate', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
虽然更容易(从CreatedDate列不存在的位置).
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |