복붙노트

[SQL] SQL 서버 내부 CLR 어셈블리 C #을

SQL

SQL 서버 내부 CLR 어셈블리 C #을

나는 이런 식으로 뭔가를 생각하고있다.

-- 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

------------------------------------------편집하다

대답 @faester 다음 : - 어떻게 내가 numberTOstring 일을 사용하도록 제안, 코드에서 XML을 사용하지만, 나는 XML 옵션이 여기에 최고 추측 할 수 ...

다시 말하지만, 난 정말 최선의 선택을하지 않더라도, 이렇게 ...

해결법

  1. ==============================

    1.네, 당신은 어셈블리를 등록 할 수 있지만, 거의 성능 문제로 인해 좋은 아이디어입니다.

    네, 당신은 어셈블리를 등록 할 수 있지만, 거의 성능 문제로 인해 좋은 아이디어입니다.

    당신은 스칼라 값에 복잡한 숫자 계산 또는 유사한 작업을한다면 그것은 당신에게 많은 유연성을 제공 할 수 있습니다. 그러나 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)
            {
            }
        }
    

    그것은 서버 준비하기 위해 몇 가지 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
    

    다시 : 당신은 정말이 필요하다고 확신한다, 그것은 거의 좋은 아이디어입니다! (I 이메일 확인이 DNS 조회 등을 만들기 위해 한 번 사용하고 있지만, 모든 비즈니스 로직은 SQL로 작성된 시스템에서였습니다. 그리고 그 나쁜!)

    몇 가지 유용한 참조 :

    http://msdn.microsoft.com/en-us/library/ms189524.aspx

    http://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx

  2. ==============================

    2.당신이 설명하는 정확한 기능을 수행하기 위해 SQL CLR을 사용합니다.

    당신이 설명하는 정확한 기능을 수행하기 위해 SQL CLR을 사용합니다.

  3. ==============================

    3.것이 가능하다. (그러나이 의견을 읽고).

    것이 가능하다. (그러나이 의견을 읽고).

  4. from https://stackoverflow.com/questions/6364152/clr-assembly-c-sharp-inside-sql-server by cc-by-sa and MIT license