2009-12-17 17 views
6

Ho una tabella che contiene molte righe di comandi SQL che compongono una singola istruzione SQL (a cui sono grato per questa risposta, punto 5 here)contenuti SQL di output di una tabella di stringhe

ho seguito l'esempio in questa risposta e ora hanno una tabella di SQL - ogni riga è una riga di SQL che crea una query. Posso copiare e incollare il contenuto di questa tabella in una nuova finestra di query e ottenere i risultati tuttavia a causa della mia mancanza di conoscenza SQL non sono sicuro di come procedo a copiare il contenuto della tabella in una variabile stringa che posso quindi eseguire .

Edit: L'istruzione SQL in mia tabella comprende 1 riga per ogni riga della dichiarazione cioè

Row1: SELECT * FROM myTable 
Row2: WHERE 
Row3: col = @value 

Questa affermazione se copiato in un VARCHAR (MAX) supera il limite MAX.

Attendo con ansia le vostre risposte. nel frattempo mi metterò alla prova.

Grazie

risposta

9

È possibile utilizzare coalesce per con catenare il contenuto di una colonna in una stringa, ad es.

create table foo (sql varchar (max)); 

insert foo (sql) values ('select name from sys.objects') 
insert foo (sql) values ('select name from sys.indexes') 

declare @sql_output varchar (max) 
set @sql_output = ''  -- NULL + '' = NULL, so we need to have a seed 
select @sql_output =  -- string to avoid losing the first line. 
     coalesce (@sql_output + sql + char (10), '') 
    from foo 

print @sql_output 

Nota: non testato, appena fuori dalla parte superiore della mia testa, ma un esempio di lavoro di questo dovrebbe produrre il seguente output:

select name from sys.objects 
select name from sys.indexes 

È possibile quindi eseguire il contenuto della stringa con exec (@sql_output) o sp_executesql.

+0

ecco, grazie. L'unico problema che ho è che la mia tabella contiene più istruzioni di quante possano essere gestite da varchar (max).Qual è un altro tipo di dati adatto che posso usare. Sto usando SQL Server 2008 se questo aiuta. – Belliez

1

Si può provare qualcosa di simile

DECLARE @TABLE TABLE(
     SqlString VARCHAR(MAX) 
) 

INSERT INTO @TABLE (SqlString) SELECT 'SELECT 1' 

DECLARE @SqlString VARCHAR(MAX) 

SELECT TOP 1 @SqlString = SqlString FROM @TABLE 

EXEC (@SqlString) 

stringa Concatenate da più righe

DECLARE @Table TABLE(
     ID INT, 
     Val VARCHAR(50) 
) 
INSERT INTO @Table (ID,Val) SELECT 1, 'SELECT *' 
INSERT INTO @Table (ID,Val) SELECT 2, 'FROM YourTable' 
INSERT INTO @Table (ID,Val) SELECT 3, 'WHERE 1 = 1' 

DECLARE @SqlString VARCHAR(MAX) 
--Concat 
SELECT DISTINCT 
     @SqlString = 
     (
      SELECT tIn.Val + ' ' 
      FROM @Table tIn 
      ORDER BY ID 
      FOR XML PATH('') 
     ) 
FROM @Table t 

PRINT @SqlString 
+0

la tabella che sto convertendo in una stringa è maggiore di VARCHAR (MAX)? Potete consigliare un tipo di dati adatto. La tabella contiene circa 400 righe. Grazie, questo è quasi quello che sto cercando. – Belliez

+0

Dai un'occhiata qui teratrax.com/articles/varchar_max.html. Si afferma * Questi tipi di dati possono contenere la stessa quantità di dati che i BLOB possono contenere (2 GB) * –

+0

interessanti, la mia query sql sicuramente non passa 2 GB !! Sto usando VARCHAR (MAX) come indicato sopra. – Belliez

0

se si desidera eseguire una serie di SQL quindi utilizzare Exec() o sp_executeSql

Problemi correlati