2017-03-01 147 views
1

我在C#創建以下方法定義CLR存儲過程:的SQL Server 2016 CLR存儲過程可空出參數

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

但是當我嘗試在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] 

我得到以下錯誤:

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

是否有任何可能的方式來創建存儲proced一個CLR有一個可空的參數?如果是這樣,怎麼樣?

回答

0

從C#代碼中的參數類型中取出問號。 Sql*類型已經可以爲空。

要將任何Sql*類型設置爲T-SQL中的NULL,請使用靜態Null字段(例如SqlBoolean.Null)。

要測試任何Sql*類型以查看它們是否爲空,請檢查布爾值IsNull屬性(例如if (fileName.IsNull))。

要了解有關通常使用SQLCLR的更多信息,請查看我在SQL Server Central上關於該主題撰寫的系列文章:Stairway to SQLCLR

+0

那麼你如何去設置它的值爲null?如果我嘗試'myValue = null',我收到編譯時錯誤「無法將null轉換爲'System.Data.SqlTypes.SqlBoolean',因爲它是非空值類型」 –

+0

很高興您的工作:-)。我再次更新以添加更多信息並鏈接到我正在處理的一系列文章,這可能會有所幫助。 –