在TSQL的列名中引用带引号的列

时间:2018-08-03 13:37:26

标签: sql sql-server tsql

我有这样命名的列。我得到

["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];

2 个答案:

答案 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