Joh*_*ohn 6 sql-server-2008 sql-server
在我的 SQL Server 2008 数据库中,我有一个包含两个 uniqueidentifier 列的表。
CREATE TABLE MyTable (
Col1 uniqueidentifier rowguidcol not null,
Col2 uniqueidentifier not null,
AttachmentData varbinary(max) filestream null
)
Run Code Online (Sandbox Code Playgroud)
现在,我想通过将其从 Col1 移动到 Col2 来切换具有 rowguidcol 标识符的列,因此它最终会成为
CREATE TABLE MyTable (
Col1 uniqueidentifier not null,
Col2 uniqueidentifier rowguidcol not null,
AttachmentData varbinary(max) filestream null
)
Run Code Online (Sandbox Code Playgroud)
当我尝试通过表设计器执行此操作时(通过设置 Col1.RowGuid = No 和 Col2.RowGuid = Yes),我收到以下错误:
- Error modifying column properties for 'Col1'.
A table with FILESTREAM column(s) must have a non-NULL unique ROWGUID column.
Run Code Online (Sandbox Code Playgroud)
有没有办法用 rowguidcol 标识符切换列,或者我应该重命名这个表,创建一个新的,然后从旧表中复制数据?
首先,表设计器并不是所有软件中最聪明的,并且可能不会选择您期望的更改表的方法。设计者通常会创建一个新表,移动数据,然后删除原始表。但是,根据您的错误,设计师也可能不FILESTREAM
精明。
但是,如果您通过ALTER
命令自己尝试,您会发现 SQL Server 无法更改列以删除 rowguidcol 设置。走着瞧吧:
ALTER TABLE TABLEName ALTER COLUMN Col1 uniqueidentifier DROP ROWGUIDCOL;
Run Code Online (Sandbox Code Playgroud)
给出错误:无法更改列“Col1”,因为它是“ROWGUIDCOL”。
致谢马丁·史密斯。我忽略了 ROWGUIDCOL 运算符,它们是:
ALTER TABLE MyTable ALTER COLUMN Col1 DROP ROWGUIDCOL;
ALTER TABLE MyTable ALTER COLUMN Col2 ADD ROWGUIDCOL;
Run Code Online (Sandbox Code Playgroud)
但是,由于参与的FILESTREAM
的DROP ROWGUIDCOL
命令无法处理。
所以,是的,您需要创建一个新表并移动数据。
归档时间: |
|
查看次数: |
6208 次 |
最近记录: |