Compartir a través de


Asignación de datos de parámetros CLR

Se aplica a:SQL Server

En la tabla siguiente se enumeran los tipos de datos de SQL Server, sus equivalentes en Common Language Runtime (CLR) para SQL Server en el espacio de nombres System.Data.SqlTypes y sus equivalentes CLR nativos en .NET Framework.

Tipo de datos de SQL Server Tipo (en System.Data.SqlTypes o Microsoft.SqlServer.Types) Tipo de datos CLR (.NET Framework)
bigint SqlInt64 Int64, Nullable<Int64>
binary SqlBytes, SqlBinary Byte[]
bit SqlBoolean Boolean, Nullable<Boolean>
char Ninguno Ninguno
cursor Ninguno Ninguno
date SqlDateTime DateTime, Nullable<DateTime>
datetime SqlDateTime DateTime, Nullable<DateTime>
datetime2 Ninguno DateTime, Nullable<DateTime>
datetimeoffset None DateTimeOffset, Nullable<DateTimeOffset>
decimal SqlDecimal Decimal, Nullable<Decimal>
float SqlDouble Double, Nullable<Double>
geography SqlGeography 1 Ninguno
geometry SqlGeometry 1 Ninguno
hierarchyid SqlHierarchyId 1 Ninguno
image Ninguno Ninguno
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Decimal, Nullable<Decimal>
nchar SqlChars, SqlString String, Char[]
ntext Ninguno Ninguno
numeric SqlDecimal Decimal, Nullable<Decimal>
nvarchar SqlChars, SqlString

SQLChars es una mejor coincidencia para la transferencia y el acceso a datos, y SQLString es una mejor coincidencia para realizar operaciones de String.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (sin embargo, el intervalo de SqlSingle es mayor que real ) Single, Nullable<Single>
rowversion Ninguno Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Decimal, Nullable<Decimal>
sql_variant Ninguno Object
table Ninguno Ninguno
text Ninguno Ninguno
time Ninguno TimeSpan, Nullable<TimeSpan>
timestamp Ninguno Ninguno
tinyint SqlByte Byte, Nullable<Byte>
uniqueidentifier SqlGuid Guid, Nullable<Guid>
Tipo definido por el usuario (UDT) Ninguno La misma clase que está enlazada al tipo definido por el usuario en el mismo ensamblado o en un ensamblado dependiente.
varbinary SqlBytes, SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[], Nullable<byte>
varchar Ninguno Ninguno
xml SqlXml Ninguno

1 Definido en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y se puede descargar desde el paquete de características de SQL Server .

Conversión automática de tipos de datos con parámetros de salida

Un método CLR puede devolver información al código o programa de llamada marcando un parámetro de entrada con el modificador de out (C#) o <Out()> ByRef (Visual Basic .NET). Si el parámetro de entrada es un tipo de datos CLR en el espacio de nombres System.Data.SqlTypes y el programa de llamada especifica su tipo de datos equivalente de SQL Server como parámetro de entrada, se produce automáticamente una conversión de tipos cuando el método CLR devuelve el tipo de datos.

Por ejemplo, el siguiente procedimiento almacenado CLR tiene un parámetro de entrada de SqlInt32 tipo de datos CLR marcado con out (C#) o <Out()> ByRef (Visual Basic):

  • de C#
  • de Visual Basic para .NET
[Microsoft.SqlServer.Server.SqlProcedure]
public static void PriceSum(out SqlInt32 value)
{ ... }

Una vez compilado y creado el ensamblado en la base de datos, el procedimiento almacenado se crea en SQL Server con el siguiente transact-SQL, que especifica un tipo de datos de SQL Server de int como parámetro OUTPUT:

CREATE PROCEDURE PriceSum
(@sum INT OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum;

Cuando se llama al procedimiento almacenado CLR, el tipo de datos SqlInt32 se convierte automáticamente en un tipo de datos int y se devuelve al programa de llamada.

Sin embargo, no todos los tipos de datos CLR se pueden convertir automáticamente a sus tipos de datos de SQL Server equivalentes a través de un parámetro out. En la tabla siguiente se enumeran estas excepciones.

Tipo de datos CLR (SQL Server) Tipo de datos de SQL Server
Decimal smallmoney
SqlMoney smallmoney
Decimal money
DateTime smalldatetime
SQLDateTime smalldatetime