Quando provo ad eseguire il seguente frammento di codice SQL all'interno di un ciclo del cursore,Come posso recuperare più colonne da utilizzare in un ciclo di cursore?
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
ricevo il seguente messaggio,
Msg 15248, livello 11, stato 1, procedura sp_rename, Linea 213
O il parametro@objname
è ambiguo o il richiesto@objtype
(COLONNA) è errato.
Cosa c'è che non va e come lo risolvo? Ho provato a racchiudere il nome della colonna tra parentesi []
e le virgolette doppie ""
come alcuni dei risultati di ricerca suggeriti.
Modifica 1 -
Ecco l'intero script. Come faccio a passare il nome della tabella alla sp rename? Non sono sicuro di come farlo poiché i nomi delle colonne si trovano in una delle tante tabelle.
BEGIN TRANSACTION
declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500)
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'
open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N', column'
print @cmd
EXEC sp_executeSQL @cmd
fetch next from Tests into @test
END
close Tests
deallocate Tests
ROLLBACK TRANSACTION
--COMMIT TRANSACTION
Edit 2 - Lo script è stato progettato per rinominare le colonne i cui nomi corrispondono a un modello, in questo caso con un prefisso "PCT". Le colonne si trovano in una varietà di tabelle all'interno del database. Tutti i nomi delle tabelle sono preceduti da "TestData".
questa riga concatena una stringa. perché non lo si stampa in modo da poter vedere quale sia il contenuto della stringa, –
'@ test' ha il [form di' table.column' o 'schema.table.column'] (http://msdn.microsoft .com/it/us/library/ms188351.aspx), non è vero? – GSerg
Se @test contiene il nome qualificato deve essere in apostrofi. Se vale la stessa ipotesi, right() rimuoverà i primi tre caratteri nel nome della tabella; se volevi sostituire gli ultimi caratteri del nome della colonna, questo sarebbe 'SINISTRA'. Potresti espandere un po 'lo script aggiungendo set @test = ...? –