Asignar datos de parámetros CLR

Se aplica a:SQL Server

En la tabla siguiente se enumeran los tipos de datos de Microsoft 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 Microsoft .NET Framework.

Tipos 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, booleano que acepta<valores NULL>
char None None
cursor None None
date SqlDateTime DateTime, DateTime que acepta<valores NULL>
datetime SqlDateTime DateTime, DateTime que acepta<valores NULL>
datetime2 None DateTime, DateTime que acepta<valores NULL>
DATETIMEOFFSET None DateTimeOffset, DateTimeOffset que acepta<valores NULL>
decimal SqlDecimal Decimal, decimal que acepta<valores NULL>
float SqlDouble Double, Double que acepta<valores NULL>
geography SqlGeography

SqlGeography se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y se puede descargar desde SQL Server feature pack.
None
geometry SqlGeometry

SqlGeometry se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y se puede descargar desde SQL Server feature pack.
None
hierarchyid SqlHierarchyId

SqlHierarchyId se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y se puede descargar desde SQL Server feature pack.
None
image None None
int SqlInt32 Int32, Nullable<Int32>
money SqlMoney Decimal, decimal que acepta<valores NULL>
nchar SqlChars, SqlString String, Char[]
ntext None None
numeric SqlDecimal Decimal, decimal que acepta<valores NULL>
nvarchar SqlChars, SqlString

SQLChars es una mejor coincidencia para la transferencia y el acceso de datos, y SQLString es una mejor coincidencia para realizar operaciones de cadena.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], Nullable<char>
real SqlSingle (el intervalo de SqlSingle, sin embargo, es mayor que real) Single, Nullable<Single>
rowversion None Byte[]
smallint SqlInt16 Int16, Nullable<Int16>
smallmoney SqlMoney Decimal, decimal que acepta<valores NULL>
sql_variant None Object
table None None
text None None
time None TimeSpan, TimeSpan que acepta valores<NULL>
timestamp None None
tinyint SqlByte Byte, Byte que acepta valores<NULL>
uniqueidentifier SqlGuid Guid, Guid que acepta valores<NULL>
Tipo definido por el usuario (UDT) None 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[], byte que acepta valores<NULL>
varchar None None
xml Sqlxml None

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

Un método CLR puede devolver información al código o programa que realiza la llamada marcando un parámetro de entrada con el modificador out (Microsoft Visual C#) o <Out()> ByRef (Microsoft Visual Basic) 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 equivalente SQL Server tipo de datos 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 del tipo de datos CLR sqlInt32 que está marcado con out (C#) o< Out()> ByRef (Visual Basic):

[Microsoft.SqlServer.Server.SqlProcedure]  
public static void PriceSum(out SqlInt32 value)  
{ ... }  
\<Microsoft.SqlServer.Server.SqlProcedure> _  
Public Shared Sub PriceSum( \<Out()> ByRef value As SqlInt32)  
...  
End Sub  

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 SQL Server tipo de datos 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 en sus tipos de datos equivalentes SQL Server a través de un parámetro out. En la tabla siguiente se enumeran estas excepciones.

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

Historial de cambios

Contenido actualizado
Se agregaron tipos SqlGeography, SqlGeometry y SqlHierarchyId a la tabla de asignación.

Consulte también

Tipos de datos de SQL Server en .NET Framework