>esiste una funzione che passandogli il nome della colonna, mi
>restituisce il tipo???
Ciao scandian,
no, ma nessuno ti vieta di definire una user-defined function scalare che ti restituisca questa informazione.
SQL Server offre le INFORMATION_SCHEMA views che aderiscono allo standard ANSI SQL-92 e permettono di leggere i metadati di un database senza la necessità di accedere alle tabelle di sistema.
Nel tuo caso potresti ricorrere alla INFORMATION_SCHEMA view COLUMNS:
USE AdventureWorks;
GO
/* Definisco l'UDF dbo.GetColumnType */
CREATE FUNCTION dbo.GetColumnType(
@Schema nvarchar(128),
@Table nvarchar(128),
@Column nvarchar(128)
)
RETURNS nvarchar(128)
BEGIN
RETURN(
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @Schema
AND TABLE_NAME = @Table
AND COLUMN_NAME = @Column
)
END
GO
/* Esempi */
SELECT dbo.GetColumnType(N'HumanResources', N'Department', N'Name') AS DataType;
GO
/* Output:
DataType
----------
nvarchar
(1 row(s) affected)
*/
SELECT dbo.GetColumnType(N'Person', N'Address', N'ModifiedDate') AS DataType;
GO
/* Output:
DataType
----------
datetime
(1 row(s) affected)
*/
/* Pulizia */
DROP FUNCTION dbo.GetColumnType;
Per maggiori informazioni leggi il seguente paragrafo sui Books Online:
"COLUMNS (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms188348.aspx
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org