2017-03-01 3 views
1

J'ai créé une procédure stockée CLR avec la définition de méthode suivante en C#:SQL Server 2016 CLR procédure stockée avec le paramètre annulable sur

public static void MyProcedure (SqlString path, SqlString fileName, out SqlBoolean? myValue) 

Mais lorsque je tente de créer dans SQL Server 2016:

create procedure [dbo].[MyProcedure] 
    @path nvarchar(max), 
    @fileName nvarchar(max), 
    @myValue bit output 
with execute as caller 
as external name [MyAssembly].[StoredProcedures].[MyProcedure] 

je reçois l'erreur suivante:

CREATE PROCEDURE for "MyProcedure" failed because T-SQL and CLR types for parameter "@myValue" do not match.

Est-il possible possible de créer un CLR stocké Procéd ure qui a un paramètre nullable out? Et si oui, comment?

Répondre

0

Supprimer le point d'interrogation du type de paramètre dans le code C#. Les types Sql* sont déjà nullables.

Pour définir l'un des types Sql* à ce qui sera NULL dans T-SQL, utilisez le champ Null statique (par exemple SqlBoolean.Null).

Pour tester l'un des types Sql* pour voir s'ils sont NULL, vérifiez la propriété booléenne IsNull (par exemple, if (fileName.IsNull)).

Pour en savoir plus sur l'utilisation de SQLCLR en général, veuillez consulter les séries que j'écris sur ce sujet sur SQL Server Central: Stairway to SQLCLR.

+0

Ensuite, comment allez-vous définir sa valeur à null? Si j'essaye 'myValue = null' je reçois une erreur de compilation de" Impossible de convertir null à 'System.Data.SqlTypes.SqlBoolean' parce que c'est un type de valeur non-nullable " –

+0

Content de l'avoir fait fonctionner :-). J'ai mis à jour à nouveau pour ajouter un peu plus d'informations et un lien vers une série d'articles sur lesquels je travaille qui pourrait être utile. –