Tôi có một bảng có hơn 600 cột được nhập từ tệp CSV
có ký tự đặc biệt % _ -
trong tên cột. Có cách nào để thay đổi tên cột để xóa các ký tự đặc biệt này không?Làm cách nào để thay đổi tên cột SQL Server trong T-SQL?
Mã có thể có trong T-SQL.
Tôi có một bảng có hơn 600 cột được nhập từ tệp CSV
có ký tự đặc biệt % _ -
trong tên cột. Có cách nào để thay đổi tên cột để xóa các ký tự đặc biệt này không?Làm cách nào để thay đổi tên cột SQL Server trong T-SQL?
Mã có thể có trong T-SQL.
Bạn có thể truy vấn bảng information_schema và tạo ra các script sp_rename để đổi tên các cột.
SELECT 'EXEC sp_rename ''' + TABLE_NAME + '.' + QUOTENAME(COLUMN_NAME) + ''', ''' + REPLACE(COLUMN_NAME, '%', '') + ''', ''COLUMN''; '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%[%]%'
Dưới đây là a permalink to an actual runnable example
Bạn có thể sử dụng điều này không?
sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN'
EXEC sp_rename 'table.[Oh%Dear]', 'OhDear', 'COLUMN';
Làm việc ví dụ (không chắc chắn về [ ]
trong sp_rename)
CREATE TABLE foo ([Oh%Dear] int)
EXEC sp_rename 'foo.[Oh%Dear]', 'OhDear', 'COLUMN'
EXEC sys.sp_help 'foo'
đây là một ví dụ rằng vòng lặp trên một bảng và thay đổi sẽ gạch dưới và dấu phần trăm
create table Test ([col%1] varchar(50),[col_2] varchar(40))
go
select identity(int,1,1) as id ,column_name,table_name into #loop
from information_schema.columns
where table_name = 'Test'
and column_name like '%[%]%'
or column_name like '%[_]%'
declare @maxID int, @loopid int
select @loopid =1
select @maxID = max(id) from #loop
declare @columnName varchar(100), @tableName varchar(100)
declare @TableColumnNAme varchar(100)
while @loopid <= @maxID
begin
select @tableName = table_name , @columnName = column_name
from #loop where id = @loopid
select @TableColumnNAme = @tableName + '.' + @columnName
select @columnName = replace(replace(@columnName,'%',''),'_','')
EXEC sp_rename @TableColumnNAme, @columnName, 'COLUMN';
set @loopid = @loopid + 1
end
drop table #loop
select * from Test
Tôi không biết về TSQL, nhưng tôi nghĩ rằng tôi biết câu trả lời trong tsql. – JohnFx