1

SSMS を使用して Excel スプレッドシートを SQL Server にインポートすると、引用符が追加されることに気付きました。何らかの理由でExcelがこれを行う必要があることをどこかで読んだことがあります。SQL Server では、列名を囲むこれらの引用符は役に立たないため、プログラムでそれらを削除する方法が必要です。私が作ろうとした、うまくいかない最も近いものはEXEC sp_rename 'Table.["withquotes"]', NewColumnName, 'replace(Table.["withquotes",'"','']. replaceテーブル内のすべての列名をループして、それらの列名に引用符が含まれている場所で関数を使用したいと思います。これを行うための典型的で慣用的な方法はありますか?

4

2 に答える 2

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
于 2012-10-29T17:29:02.367 に答える
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 を値に置き換えます)

于 2015-10-12T13:04:06.080 に答える