Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [SQL SERVER] T-SQL, c'è forse un limite?

    Salve, ho fatto uno scriptino di prova T-SQL ma a quanto pare non funziona:

    codice:
    declare @prova as varchar(50)
    declare @tab as table(id varchar(50))
    declare @start as bigint
    declare @end as bigint
    
    set @start=0
    set @end=1
    
    while @end>0 begin
    	set @end=charindex(',',(select top 1 pt from reportserver..tbreportparam where ssid='prova'),@start+1)
    	if @end>0
    	begin
    		set @prova=substring((select top 1 pt from reportserver..tbreportparam where ssid='prova'),@start+1,(@end-@start)-1)
    		insert into @tab (id) values (@prova)
    	end
    	set @start=@end
    end
    
    select * from @tab
    In pt è presente una stringa lunga oltre 16.000 caratteri, è una serie di indici separati da vigola e la stringa termina con una virgola, del tipo id,id,id,......id,id,

    Il problema è che in @tab non vengono salvati tutti gli indici ma solo pco meno della metà.

    Secondo un'analisi ho constatato che si ferma esattamente al carattere 8.000 (guarda caso l'ottomillesimo carattere è una virgola)

    pt è di tipo Text e facendo una select secca effettivamente in pt c'è la stringa per intero, quindi che sia un limite di usare tale select dentro il T-SQL che mi restituisce una stringa di 8000 caratteri?

  2. #2

    Non si può fare

    Sono giunto alla conclusione che un dato di tipo TEXT o NTEXT lo archivi e lo gestisci esclusivamente da codice e non può essere manipolato tramite T-SQL.

    Vi spiego perché

    La mia stringa contenuta in PT (di tipo text) è lunga oltre 16.000 caratteri.

    contiene degli id separati da virgola (id,id,id,....) e termina con una virgola.

    Io vorrei inserire nella variabile tabella @tab una riga per ogni indice.

    E' impossbile.

    Ho provato la strada del CHARINDEX... (l'intenzione era ti prendere con l'unione del CHARINDEX e SUBSTRING i vari indici a mo di porzione.

    CHARINDEX prende la massimo 8.000 caratteri, di conseguenza esaminava la stringa fino all'ottomillesimo carattere (di cui il problema riportato sopra).

    Ho provato lo stratagemma inverso.

    Mi sono salvato la stringa in una tabella temporanea con un unico campo di tipo text.

    L'idea era quella, tramite SUBSTRING e CHARINDEX di prendere il primo indice e poi aggiornare la stringa levando l'indice iniziale es.

    '1020,1939,46379,....' diventava dopo un giro '1939,46379,....'

    Come per CHARINDEX SUBSTRING restituisce stringhe al massimo lunghe 8.000 e sempre in del secchio me la sono presa.


    Ho provato tramite REPLACE ma nonostante nella documentazione ufficiale Microsoft sia indicato che lavora con dati di tipo NText e Text se gli do in pasto NText o Text da errore.

    Continuo a prendermela in del secchio.

    Concludo quindi che i Text e NText li lavori solo da codice esterno

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.