簡體   English   中英

SQL Server CLR和T-SQL存儲過程是否與調用方相同?

[英]Are SQL Server CLR and T-SQL stored procedures identical to the caller?

我想知道是否可以用C#編寫一些虛擬的存儲過程,因為我不太了解T-SQL。

是否使用標准數據庫庫類將同一過程的C#和T-SQL版本與調用代碼(例如C ++ / C#/ Java代碼)區分開?

是的,呼叫者不會知道兩者之間的區別。 但是,API有一些區別:

  • LOB類型的參數(即NVARCHAR(MAX)VARBINARY(MAX)XML )在SQLCLR對象中不能具有默認值。 (可能建議Microsoft Connect投票: 在SQLCLR對象中支持NVARCHAR(MAX),VARBINARY(MAX)和XML類型的默認參數值
  • 您不能將TVP傳遞給SQLCLR對象。
  • 您不能從SQLCLR對象返回以下數據類型:
    • SMALLDATETIME
    • SMALLMONEY
  • 您不能將以下數據類型傳入SQLCLR對象或從其中返回以下數據類型:
    • CHAR
    • VARCHAR
    • TEXT
    • NTEXT
    • IMAGE


除了對問題的技術回答之外,還需要考慮一些事項:

  • 您覺得在C#中比在T-SQL中更容易實現什么?
  • 什么才算是“虛擬”? 您只需要簽名嗎? 如果是這樣,那么在純T-SQL中執行此操作會容易得多。 T-SQL進行模擬存儲過程所需要做的就是:

     CREATE PROCEDURE SchemaName.ProcedureName ( @Param1name Param1Type, @Param2name Param2Type, ... ) AS SELECT CONVERT(resultField1type, NULL) AS [resultField1name], CONVERT(resultField2type, NULL) AS [resultField2name], ... ; 
  • 術語“虛擬”意味着這些將在以后用其他東西代替。 它們將被替換為什么? T-SQL存儲過程? 如果您不了解T-SQL,誰來寫那些?

  • 如果您不了解T-SQL,並且沒有任何人知道T-SQL(因此需要在SQLCLR中制作“虛擬”存儲過程),那么您如何知道您正在構造此結構?解決方案正確嗎? 無論T-SQL與SQLCLR無關,您都可能朝完全錯誤的方向前進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM