마이크로소프트 SQL 서버 API

마이크로소프트 SQL 서버 API

응용 프로그램에 대한 아이디어가 있지만 이상적으로는 MSSQL용 일종의 "SQL 재작성" 엔진을 작성할 수 있어야 합니다(HTTP 서버가 "URL 재작성" 모듈을 가질 수 있는 것과 거의 같은 방식). 서버는 이를 처리하고 다른 코드를 먼저 실행합니다.

이것이 MSSQL에서도 가능합니까? 아니면 목표를 달성하기 위해 다른 방법을 추구해야 합니까?

답변1

문제는 다시 작성하는 방법이 아니라 다시 작성하려는 "어디"입니다. IIS와 같은 기능을 원한다고 하셨는데 MSSQL에서는 불가능합니다. IIS에는 요청 처리 파이프라인이 있으며 이 파이프라인에 사용자 지정 코드를 삽입할 수 있는 지점이 많이 있습니다(즉, Global.asax에서 자체 ISAPI 확장, HTTPModule, 이벤트 생성).

SQL Server에는 개발자에게 공개되는 SQL 파이프라인이 없습니다. SQL 요청이 SQL Server에 들어오면 이를 다시 작성할 수 없습니다. 업데이트/삽입/삭제 BEFORE 또는 INSTEAD OF 트리거는 원래 쿼리의 테이블 이름을 바꾸려는 경우 문제를 해결하지 못합니다. 왜냐하면 이 테이블이 존재하지 않으면 사용자 지정 비즈니스를 실행하기 전에 예외가 발생하기 때문입니다. 트리거의 논리.

그러나 사용자 지정 데이터 공급자를 만들어(ADO.NET 응용 프로그램이 있는 경우) 클라이언트(SQL 서버가 아닌)에서 SQL을 "다시 작성할" 수 있습니다. 보다MSDN - .NET Framework 데이터 공급자 구현. 이것은 쉬운 일이 아니며 많은 노력이 필요할 것입니다. 코드에서 표준 MSSQL 데이터 공급자(System.Data.SqlClient)의 대부분의 표준 기능을 재사용하고 SQL을 구문 분석하고 특정 명령을 바꾸려는 함수만 재정의할 수 있습니다.

도 봐주세요http://sqlfaultretryprovide.codeplex.com/- 이 프로젝트는 "오류 시 재시도" 기능을 자동으로 제공할 수 있는 SQL Server에 대한 사용자 지정 .NET 데이터 공급자를 구축하는 것이었습니다. 따라서 이것은 SQL 재작성기가 아니지만 직접 작성하기 위한 예로 사용할 수 있습니다.

답변2

당신이 사용할 수있는트리거INSERT, UPDATE 및 DELETE에는 해당하지만 SELECT에 해당하는 트리거는 없습니다.

또 다른 접근 방식은 가로채는 프로그램을 작성하는 것입니다.TDS 호출, 수정한 후 SQL Server에 전달합니다. 따라서 프로그램이 포트 1433 등을 수신하도록 하고 설정 프로그램에서 SQL 서버 포트를 포트 1434에서 수신하도록 변경합니다.

답변3

아마도 SQL에 비즈니스 계층을 생성하려고 할 것입니다. 기존 앱을 수정하려는 경우 SQL 어댑터가 모두 독점이므로 문제가 발생할 수 있습니다. 그러나 앱을 수정할 수 있는 경우 DB에 비즈니스 계층을 작성하여 명령을 처리할 수 있습니다. 공유 메모리 연결을 사용하는 SQL 서버.

또 다른 옵션은 SQL을 제공한 후 이를 편집하고 SQL 데이터베이스에 대해 실행하는(공유 메모리보다 훨씬 빠른 컨텍스트 연결을 사용하여) 마법의 CLR 저장 프로시저입니다.

SQL 서버는 꽤 잘 작성되어 있지만, 달성하려는 것과 같은 작업은 API를 사용하여 클라이언트에서 가장 잘 달성될 수 있으므로 처리가 클라이언트 수에 따라 분산되고 SQL 서버가 실제 SQL을 최적화할 수 있도록 허용합니다. 달리다.

답변4

.net 클래스를 사용하는 트리거를 작성할 수 있습니다.

http://www.15seconds.com/issue/041006.htm

http://aspalliance.com/1273_CLR_Triggers_for_SQL_Server_2005.all

http://www.google.com/search?rlz=1C1_____enUS397US397&sourceid=chrome&ie=UTF-8&q=sql+.net+trigger

행운을 빌어요.

관련 정보