我有这样命名的列。我得到
["year_of_birth"]
["month_of_birth"]
["day_of_birth"]
["birth_datetime"]
我写的时候
Select ["year_of_birth"] from dbo.table_name
我收到此错误
第207级状态1线1的消息
无效的列名“ care_site_id”。
我可以在SQL脚本中使用双引号引用列名称吗?有什么方法可以通过编程方式重命名这些列名?
预先感谢
CREATE TABLE [dbo].[MyTable]
(
["year_of_birth"] [varchar](50) NULL,
["month_of_birth"] [varchar](50) NULL,
["day_of_birth"] [varchar](50) NULL,
["birth_datetime"] [varchar](50) NULL
) ON [PRIMARY];
答案 0 :(得分:0)
在T-SQL中,您可以使用 sp_rename 存储过程来重命名表列。以下是一些文档:SP_RENAME
通常,最好不要使用与您的名称相同的列名称。
如果要以编程方式执行此操作,请使用which offers a rich API for Data Definition上的MS的SMO(SqlManagementObjects)库进行操作
答案 1 :(得分:0)
以下是修复列名的过程:
create procedure FixColumnNames @tableName sysname, @schemaName sysname = 'dbo'
as
begin
begin transaction
declare c cursor local for
select c.name
from sys.columns c
join sys.objects o
on c.object_id = o.object_id
where o.name = @tableName
and o.schema_id = schema_id(@schemaName)
and c.name like '%"%'
declare @cn sysname
open c;
fetch next from c into @cn;
while @@FETCH_STATUS = 0
begin
declare @old nvarchar(2000) = quotename(@schemaName) + '.' + quotename(@tableName) + '.' + quotename(@cn);
declare @new sysname = replace(@cn,'"','');
print 'renaming ' + @old +' to ' + @new;
exec sp_rename @old,@new,'COLUMN';
fetch next from c into @cn;
end
close c;
deallocate c;
commit transaction;
end