如果修改表名及字段名包含['这类特殊字符的表的字段名

execute sp_rename 'www"qqq"rrr''tt[yy]]d.uu"dkf''d[ff]]pp','wang','column'

其中表名是:www"qqq"rrr'tt[yy]d
字段名是:uu"dkf'd[ff]pp
新字段名是:wang

出现错误:标识符 'www"qqq"rrr'tt[yy]]d.uu"dkf'd[ff]]pp' 时发现语法错误。

像这种表名和字段名都含有' " []符号的情况怎么更改字段名啊?
请高手们赐教!
---------------------------------------------------------------

--规则:用[]把对象名标识出来,对象名中出现的],用两个]]表示

EXECUTE sp_rename N'[www"qqq"rrr''tt[yy]]d].[uu"dkf''d[ff]]pp]', N'wang', 'COLUMN'

---------------------------------------------------------------

--修改示例

--创建对象
CREATE TABLE [www"qqq"rrr'tt[yy]]d]
(
[uu"dkf'd[ff]]pp] int NULL
)
go

--显示名称是否正确
select 表名=o.name,字段名=c.name
from sysobjects o,syscolumns c
where o.name='www"qqq"rrr''tt[yy]d'
and o.id=c.id

/*--测试结果

表名 字段名
--------------------- -----------------
www"qqq"rrr'tt[yy]d uu"dkf'd[ff]pp

(所影响的行数为 1 行)
--*/
go

--修改字段名
EXECUTE sp_rename N'[www"qqq"rrr''tt[yy]]d].[uu"dkf''d[ff]]pp]', N'wang', 'COLUMN'
GO

--显示修改结果
select 表名=o.name,字段名=c.name
from sysobjects o,syscolumns c
where o.name='www"qqq"rrr''tt[yy]d'
and o.id=c.id

/*--测试结果

注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
COLUMN 已重命名为 'wang'。

表名 字段名
--------------------- -----------------
www"qqq"rrr'tt[yy]d wang

(所影响的行数为 1 行)
--*/
go

--删除测试
drop table [www"qqq"rrr'tt[yy]]d]

---------------------------------------------------------------

--你可以用这个函数来生成有效的对象名
--注意字符串中的',一律用两个'表示

select quotename('www"qqq"rrr''tt[yy]d')
+'.'
+quotename('uu"dkf''d[ff]pp')

--结果: [www"qqq"rrr'tt[yy]]d].[uu"dkf'd[ff]]pp]
--把这个用于 sp_rename 中就可以了(还是要注意字符串中的',一律用两个'表示)

--或者,你可以直接用下面的语句来得到你的表名+字段名的字符串表示
select quotename(quotename('www"qqq"rrr''tt[yy]d')
+'.'
+quotename('uu"dkf''d[ff]pp'),'''')

--结果: '[www"qqq"rrr''tt[yy]]d].[uu"dkf''d[ff]]pp]'

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus