从Excel导入SQL Server 2008中删除添加到列名称的引号

时间:2012-10-29 13:15:43

标签: sql-server sql-server-2008 tsql

我注意到当我使用SSMS将Excel电子表格导入SQL Server时,会添加引号。我读过某个地方,无论出于何种原因,Excel都必须这样做。一旦进入SQL Server,这些列名称周围的引号就没用了,我想以编程方式删除它们。我试图做的最接近但不起作用的是EXEC sp_rename 'Table.["withquotes"]', NewColumnName, 'replace(Table.["withquotes",'"','']。我想循环遍历表中的所有列名称,并使用replace函数,只要这些列名称包含引号。有没有一种典型的惯用方法呢?

2 个答案:

答案 0 :(得分:1)

我相信这应该有帮助...

DECLARE @tbl sysname, @col sysname
DECLARE @cmd nvarchar(max)

DECLARE cCol CURSOR FOR
    SELECT TABLE_NAME, COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME LIKE '"%"'

OPEN cCol
FETCH NEXT FROM cCol INTO @tbl, @col
WHILE @@fetch_status = 0
BEGIN
  SET @cmd = 
    N'EXEC sp_rename ''[' + @tbl + '].[' + @col + ']'', ' + 
    '''' + REPLACE(@col, '"', '') + N''', ''COLUMN''' 

  --PRINT @cmd

  EXEC sp_executeSQL @cmd

  FETCH NEXT FROM cCol INTO @tbl, @col
END

CLOSE cCol 
DEALLOCATE cCol

答案 1 :(得分:0)

仅仅是为了获取信息,我对OzrenTkalcecKrznaric的程序有误。 搜索后,这是由于缺少架构名称。所以这是我的版本,更新为包含该架构名称:

DECLARE @tbl sysname, @col sysname, @sch sysname
DECLARE @cmd nvarchar(max)

DECLARE cCol CURSOR FOR
    SELECT TABLE_NAME, COLUMN_NAME, TABLE_SCHEMA
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME LIKE '"%"' 

OPEN cCol
FETCH NEXT FROM cCol INTO @tbl, @col, @sch
WHILE @@fetch_status = 0
BEGIN
  SET @cmd = 
    N'EXEC sp_rename ''[' + @sch + '].[' + @tbl + '].[' + @col + ']'', ' + 
    '''' + REPLACE(@col, '"', '') + N''', ''COLUMN''' 

  --PRINT @cmd

  EXEC sp_executeSQL @cmd

  FETCH NEXT FROM cCol INTO @tbl, @col, @sch
END

CLOSE cCol 
DEALLOCATE cCol

还可以生成语句,然后进行复制,粘贴和执行:

USE myDb
select 'Exec sp_rename ''' + QuoteName(Schema_Name(tables.schema_id)) + '.' + QuoteName(tables.name) + '.' + QuoteName(columns.name) + '''' +
   ',''' + REPLACE ( columns.name , '"' , '') + ''', ''COLUMN'''
from sys.columns
join sys.tables on columns.object_id = tables.object_id
join sys.schemas on tables.schema_id = schemas.schema_id
where sys.columns.name like '"%"' AND sys.schemas.name =  'mySchema'

(用您的值替换myDb和mySchema)