cMi*_*nor 7 c# xml sql com .net-assembly
该表(我将传递给ASSEMBLY)在其他存储过程中计算...
我在想这样的事情.
-- I have a stored proc that gets a table, let it be myStoredProcTable
--FIST ENABLE DATA ACCESS
EXEC sp_serveroption 'TheServerName', 'DATA ACCESS', TRUE
--main.sql calls yStoredProcTable.sql and the calls functionAssembly
SELECT *
INTO #tmpTable
FROM OPENQUERY(SERVERNAME, 'EXEC test.dbo.myStoredProcTable 1')
-- pass the table to assembly
-- how would i pass the table to assembly code?, Is this POSSIBLE?
EXEC functionAssembly #tmpTable
Run Code Online (Sandbox Code Playgroud)
- - - - - - - - - - - - - - - - - - - - - 编辑
以下@faester回答: - 我怎么能在代码中使用XML,我建议使用这个numberTOstring 东西,但我猜XML选项是最好的...
再一次,我真的这样做,即使不是最好的选择......
是的,您可以注册程序集,但由于性能问题,这很少是一个好主意.
但是,如果您对标量值进行复杂的数值计算或类似操作,它可以为您提供很大的灵活性.但问题仍然是SQL本身设置为C#不是,所以你很容易遇到不匹配.
您还应该知道,您只能在静态类上导入静态成员.
但是一个例子这个类 - 故意没有命名空间,因为它似乎无法在命名空间中导入类.
public static class Math
{
[Microsoft.SqlServer.Server.SqlFunction]
public static int Add(int a, int b)
{
return a + b;
}
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Void(int a, int b)
{
}
}
Run Code Online (Sandbox Code Playgroud)
需要一些SQL才能使服务器准备就绪,您可能需要成为管理员.
EXEC SP_CONFIGURE 'clr enabled', 1
GO
RECONFIGURE
GO
-- CONSIDER: DROP ASSEMBLY SqlClr
GO
CREATE ASSEMBLY SqlClr
FROM 'pathtoassembly'
WITH PERMISSION_SET = SAFE;
GO
SELECT * FROM sys.assemblies
GO
CREATE FUNCTION [MathAdd] (@a int, @b int)
RETURNS INT
AS EXTERNAL NAME [SqlClr].Math.[Add]
GO
CREATE PROCEDURE [Void] @a INT, @b INT
AS EXTERNAL NAME [SqlClr].Math.[Void]
GO
SELECT dbo.MathAdd (1, 2)
EXEC void 1, 2
Run Code Online (Sandbox Code Playgroud)
再次:你真的应该对自己需要这个,这很少是个好主意!(我曾经使用它一次进行电子邮件验证,使得dns查找等,但那是在所有业务逻辑都是用SQL编写的系统上.这很糟糕!)
一些有用的参考:
http://msdn.microsoft.com/en-us/library/ms189524.aspx
http://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx
| 归档时间: |
|
| 查看次数: |
13422 次 |
| 最近记录: |