C# SQL Server CLR和T-SQL存储过程是否与调用方相同?
为了编写一些虚拟存储过程,我想知道是否可以用C#编写它们,因为我对t-SQL不太了解C# SQL Server CLR和T-SQL存储过程是否与调用方相同?,c#,sql-server,stored-procedures,clrstoredprocedure,C#,Sql Server,Stored Procedures,Clrstoredprocedure,为了编写一些虚拟存储过程,我想知道是否可以用C#编写它们,因为我对t-SQL不太了解 同一过程的C#和T-SQL版本是否与使用标准数据库库类调用代码(例如C++/C#/Java代码)无法区分?是的,调用方不会知道区别。但是,存在一些API差异: LOB类型的参数(即NVARCHAR(MAX)、VARBINARY(MAX)和XML)在SQLCLR对象中不能具有默认值。(可能需要投票支持的Microsoft Connect建议:) 不能将TVPs传递给SQLCLR对象 无法从SQLCLR对象返回以
同一过程的C#和T-SQL版本是否与使用标准数据库库类调用代码(例如C++/C#/Java代码)无法区分?是的,调用方不会知道区别。但是,存在一些API差异:
- LOB类型的参数(即
、NVARCHAR(MAX)
和VARBINARY(MAX)
)在SQLCLR对象中不能具有默认值。(可能需要投票支持的Microsoft Connect建议:)XML
- 不能将TVPs传递给SQLCLR对象
- 无法从SQLCLR对象返回以下数据类型:
SMALLDATETIME
SMALLMONEY
- 无法向SQLCLR对象传入或从中返回以下数据类型:
CHAR
VARCHAR
TEXT
NTEXT
图像
除了这个问题的技术答案之外,还有一些事情需要考虑:
- 你觉得用C#比用T-SQL更容易做什么
- 到底什么才是“哑巴”?你只是需要签名吗?如果是这样,那么在普通的T-SQL中实现这一点要容易得多。T-SQL执行模拟存储过程所需的一切是:
CREATE PROCEDURE SchemaName.ProcedureName ( @Param1name Param1Type, @Param2name Param2Type, ... ) 作为 选择CONVERT(resultField1type,NULL)作为[resultField1name], 将(resultField2type,NULL)转换为[resultField2name], ... ;
- 术语“虚拟”意味着这些将在以后被其他东西取代。它们将被什么取代?T-SQL存储过程?如果你不懂t-SQL,谁来写呢
- 如果您不了解t-SQL,并且没有任何人帮助您了解t-SQL(因此需要在SQLCLR中创建“虚拟”存储过程),那么您如何知道您正在正确构造此解决方案?不管T-SQL和SQLCLR是什么,您都可能会朝着完全错误的方向前进李>