我注意到,当我使用 SSMS 将 Excel 电子表格导入 SQL Server 时,会添加引号。我在某处读到过,无论出于何种原因,Excel 都必须这样做。一旦进入 SQL Server,列名周围的这些引号就没有用了,我希望有一种编程方式来删除它们。我试图做的最接近但不起作用的东西是EXEC sp_rename 'Table.["withquotes"]', NewColumnName, 'replace(Table.["withquotes",'"','']
. 我想遍历表中的所有列名,并replace
在这些列名包含引号的地方使用该函数。有没有一种典型的、惯用的方法来做到这一点?
问问题
2437 次
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 回答