2009-08-12 19 views
11

Ho scritto una procedura tsql che inserisce una stringa in un file di testo che significa che tutte le variabili devono essere convertite in una stringa. Invece di usare un'istruzione caso per caso, è più facile fare ciò che comprende tutti i casi e forza qualunque tipo a un tipo di stringa?tsql: il modo migliore per trasmettere variabili al tipo di stringa?

grazie in anticipo

risposta

25

tutto in maiuscolo è testo letterale, minuscola è qualcosa in cui si deve interpolare un valore:

CAST(expression AS CHAR) 
-- or: 
CAST(expression AS VARCHAR) 

È possibile specificare una lunghezza.

Sfortunatamente, è un po 'più difficile con datetimes, se si desidera formattare in un modo diverso dalla rappresentazione predefinita.

Le mie informazioni provengono dallo MSDN site. Penso che dovrai leggere quel sito e gli altri, con attenzione e giocarci un po ', ma si spera che la funzione CAST sarà un buon inizio.

Buona fortuna!

0

Non penso che ci sia - e se ci fosse, non mi fiderei di esso, poiché probabilmente ci sarebbe un controllo molto limitato sulla formattazione generale. Costruisci il tuo, e apparirà esattamente come deve apparire. I fattori da contemplare:

  • formattazione Data
  • Numeri, zeri iniziali, cifre decimali, segni +/-
  • lunghezza della linea, capo automatico
  • spazi da guida, gli spazi finali, spazi tra le stringhe che don' t avere spazi iniziali o finali

... continua così.

1

è necessario convertirlo/gettarlo ogni volta. Ho fatto una funzione d'uso:

CREATE FUNCTION QuoteNull 
(
    @InputStr  varchar(8000) --value to force to string 
) 
RETURNS 
varchar(8000) 
AS 

BEGIN 
    RETURN COALESCE(''''[email protected]+'''','null') 
END 

mette apici intorno al valore o semplicemente la parola null se è nullo, ma è possibile personalizzare come necessario.

qui è una versione che gestisce le date di formattazione automatica:

CREATE FUNCTION QuoteNull 
(
    @InputStr  sql_variant --value to force to string 
) 
RETURNS 
varchar(8000) 
AS 

BEGIN 
    DECLARE @String varchar(8000) 
    SET @String=COALESCE(''''+ CASE SQL_VARIANT_PROPERTY(@InputStr,'BaseType') 
            WHEN 'datetime' THEN CONVERT(varchar(23),@InputStr,121) 
            ELSE CONVERT(varchar(8000),@InputStr) 
           END 
          +'''','null') 
    RETURN @String 
END 
Problemi correlati