문제

어떤 장점/단점을 유지하는 SQL 에서는 C#소스 코드나에 저장되었?나이 논의 친구와 함께서 오픈 소스 프로젝트는 우리는 작업 중(C#ASP.NET 포럼).는 순간에,대부분의 데이터베이스에 액세스 수행하여 건물 SQL 인라인에서는 C#고 전화하는 SQL Server DB.그래서 나는 설정하려고 하는데 이는 특정 프로젝트는 것이 가장 좋습니다.

지금까지 나는:

장점에 대한 코드:

  • 유지하기 쉽-실행할 필요가 없 SQL 스크립트를 업데이트 쿼리
  • 하기가 더 쉽게 다른 DB-아저 포트

장점에 대한 저장되어 발동:

  • 성능
  • 보안
도움이 되었습니까?

해결책

나는지 저장 프로시저

저장 프로시저는 유지 관리하기가 더 쉬울 때문에:*지를 다시 컴파일해야의 C#응용 프로그램을 변경할 때마다 일부 SQL

당신이 다시 컴파일하 어쨌든 그것을 때 데이터 형식이 변경 또는 반환할 추가 열,또는 어떤 것이다.수할 수 있습니다 시간의'투명하게 변경'SQL 에서 아래의 응용 프로그램은 매우 작은 전체

  • 당신은 결국 다시 사용하 SQL 코드입니다.

프로그래밍 언어,C#,포함되어 있는 이 놀라운 일이라고 하는 기능입니다.그것이 의미 호출할 수 있습니다 같은 코드 블록에서 여러 장소!놀랍습니다!할 수 있습니다 다음을 넣어 다시 사용 가능한 SQL 코드 내부의 하나 이러한 경우,또는 당신을 얻고 싶은 정은 첨단 기술,사용할 수 있는 라이브러리는 당신을 위해 그것을 않습니다.내가 믿고 그들이라는 객체 관계형 매퍼,그리고는 매우 일반적인 이러한 일입니다.

코드 반복은 최악의 일을 할 수 있을 때 당신을 구축을 위해 노력하고 유지 보수 응용 프로그램입니다!

동의는 이유는 storedprocs 은 나쁜 것은 아니다.그것은 훨씬 쉽게 리팩터링 및 분해(틈으로 작은 부속)코드로 함께 사용하기에 적합합니다.SQL 으로...블록의 SQL?

당신은 4 웹 서버 및 윈도우를 사용하는 애플리케이션과 동일한 SQL 코드는 지금 당신은 당신을 실현한 작은 문제가 있으로 SQl 코드 그래서 당신은 오히려......변경 proc 에서 1 장소 또는 밀어 코드 모든 웹 서버를 다시 설치하는 모든 데스크톱 응용 프로그램(clickonce 도움이 될 수 있습)에 있는 모든 windows 상자

왜 윈도우 앱에 직접 연결하는 중앙 데이터베이스?는 것처럼 보인다 거대한 보안에 구멍이 있고,병목 현상을 규칙으로 서버 사이드에서 캐시됩니다.을 만들 수 있어 연결을 통해 웹 서비스 또는 이와 유사한 귀하의 웹 서버?

그래서,1 밀어 새로운 sproc,또는 4 개의 새로운 웹 서버?

이 경우에는 밀어 하나의 새로운 sproc 지만,제 경험,95%의'밀어 변경'에 영향을 미치 코드와 데이터베이스가 아닌 방식입니다.추진 하는 경우 20 일 웹 서버는 월,1 데이터베이스에,당신은 거의 잃은 경우에 당신은 대 밀어 21 일 웹 서버 및 데이터베이스에 있습니다.

더 많은 쉽게 코드를 검토합니다.

설명할 수 있는 방법?내가 이것을 얻지 않는다.특히 보으로 sprocs 지에서 원본의 제어,따라서 액세스할 수 없습을 통해 웹 기반 SCM 브라우저 및니다.

더 많은 단점:

Storedprocs 라이브 데이터베이스에 표시되는 외부 세계로는 블랙박스입니다.간단한 일이 좋아하고 그들을 넣어서 원본을 제어한다.

또한 문제를 투명한 노력이다.그것이 의미가 있습니다 휴식하는 모든 다운로 만 개의 층 만약 당신이 정당화하고 귀하의 CEO 이유 그것은 단지 비용들 7 백만 달러를 구축하는 몇 가지 포럼이지만,그렇지 않으면 만들기 storedproc 에 대한 모든 것은 단지 추가 donkeywork 에 대한 혜택입니다.

다른 팁

이 논의되고에서 몇 가지 다른 스레드가 여기에는 현재.나는 일관의 지지 저장 프로시저하지만,일부 좋은 인수 Linq 에 대한 Sql 제안하도록 돕습니다.

포함하는 쿼리 코드에서는 커플을 단단히하는 데이터 모델입니다.저장 프로시저는 좋은 양식의 계약상의 프로그래밍을 의미하는 DBA 는 자유를 변경하는 데이터 모델과 코드에서는 절차,그래서는 계약에 의해 표현된 저장된 절차의 입력과 출력이 유지됩니다.

튜닝을 생산할 수 있는 데이터베이스는 매우 어려운 경우 쿼리에 묻혀 있는 코드고지 않는 한,중앙 관리하기 쉬운 위치에 있습니다.

[편집]여기에는 다른 현재 논

내 생각에 당신은 투표를 할 수 없습에 대한 예 또는 아니오에서 이 질문입니다.그것은 완전히 달라집에서 디자인의 응용 프로그램입니다.

나는 완전히 투표의 사용에 대한 SPs 에서는 3 층 환경이 있는 응용 프로그램은 서버에서 전면입니다.이러한 환경에서의 애플리케이션 서버가 귀하의 비즈니스를 실행하는 논리입니다.는 경우에 당신은 또한 사용 SPs 을 시작 배포하는 비즈니스 로직의 구현을 통해 모든 시스템이 불분명한 사람은 무엇에 대한 책임.결국 당신은 끝날 것이 응용 프로그램 서버는 기본적으로 아무것도 할 수 있지만 다음과 같다:

(Pseudocode)

Function createOrder(Order yourOrder) 
Begin
  Call SP_createOrder(yourOrder)
End

그래서 결국 당신은 당신의 계층간에서 실행이 아주 멋진 4 서버 클러스터 그들 각각의 장착 16Cpu 고 그것이 실제로 아무 것도 하지 않!무엇 폐기!

이 있는 경우 지방 gui 는 클라이언트로 직접 연결로 DB 나 어쩌면 더 많은 응용 프로그램은 그것이 다른 이야기입니다.이 상황에서 SPs 수 있는 봉사의 일종으로 의사는 중간 계층 분리 응용 프로그램에서 데이터 모델을 제공하는 제어할 수 있는 액세스입니다.

장점에 대한 코드:

  • 유지하기 쉽-실행할 필요가 없 SQL 스크립트를 업데이트 쿼리
  • 하기가 더 쉽게 다른 DB-아저 포트

실제로,나는 당신을 생각해야는 뒤에 있다.이럴,SQL 코드에서는 고통을 유지하기:

  • 당신이 끝까지 자신을 반복하에 관련된 코드 블록
  • SQL 지 않으로 지원되는 언어에서 많은 IDE 의 그래서 당신은 단지의 일련의 유엔 오류가 검사되는 문자열 작업을 수행을 위해 당신
  • 변화에 데이터 입력,테이블 이름이나 제약 조건을 훨씬 더 유행 교체보다는 전체 데이터베이스에 대한 새로운 중 하나
  • 어려움의 수준으로 증가하는 쿼리에서 성장의 복잡성
  • 고 테스트하는 인라인 쿼리를 필요로 건설 프로젝트

생각의 저장되던 방법으로 당신은 전화 데이터베이스에서는 개체들이 많은 다시 사용하기 쉽,거기에 단 한 곳의 편집 및 이벤트에서 당신 변경 DB 공급자,변경 내에서 일어나는 저장 프로시저지에서 당신의 코드입니다.

는 말했다,성능 향상을 저장 프로시저는 최소한으로 스튜 전에 말했듯이 나과할 수 없습니다 휴식을 넣어 지점에 저장된 절차(아직).

CON

내가 찾는 일을 많이 처리 내부에 저장된 절차의 당신의 DB 서버의 단일 지점 유연성,그것은 배신 행위입니다.

그러나 모든 것을 재정 프로그램에서는 반대로 sql-server, 할 수 있는 규모상이 있는 경우 여러 서버를 실행하는 코드입니다.의 과정이 적용되지 않는 저장 프로시저는만 아니라 정상적인 가져오거나 업데이트 하지만 사람을 수행하는 더 가공처럼 반복을 통해 데이터 집합입니다.

장점

  1. 성능한 가치가있을 수 있습니다(피 쿼리를 분석하여 DB 드라이버/계획의 레크리에이션 등)
  2. 데이터 조작에 포함되지 않은 C/C++/C#는 코드를 의미가 적은 낮은 레벨의 코드을 통해 볼 수 있습니다.SQL 은 덜 자세한 정보와 쉽게 통해 보고할 때 별도로 기재되어 있습니다.
  3. 으로 인해 별 사람들이 찾을 수 있고 재사용 SQL 코드는 많은 쉽습니다.
  4. 의 변화를 쉽게 일을 할 때 스키마에 변경 내용-당신은 같은 출력하여 코드고 그것은 훌륭한
  5. 하기가 더 쉽게 다른 데이터베이스에 있습니다.
  6. 수 목록 개별 사용 권한에 저장된 절차 및 액세스 제어에서는 레벨 too.
  7. 내 프로파일링할 수 있습니다 내 데이터 쿼리/지속성 코드에서 데이터 변환 코드입니다.
  8. 내가 구현할 수 있는 변경 조건에서 저장된 절차와 그것은 쉬운 것을 사용자 정의에서 고객의 사이트입니다.
  9. 그것은 쉽게 된를 사용하여 자동화된 도구를 변환 내 스키마와 문을 함께 보다는 오히려할 때 그 안에 포함된 내 코드는 내가 그들을 사냥하다.
  10. 손님들 모범 사례에 대한 데이터에 액세스하게 때 당신은 모든 데이터에 액세스 코드는 안쪽에 하나의 파일을 확인할 수 있습에 대한 쿼리에 액세스하는 비 성능 테이블 또는 사용하는 높은 수준의 직렬화하거나 선택*'s 코드에서 등입니다.
  11. 가 쉽게 찾을 수 있 스키마에 변화/데이터를 조작 논리를 변경할 때 그것의 모든에 나와 하나 파일입니다.
  12. 그것은 쉽게 된다 하기 위하여 검색 및 바꾸기에도 편집 SQL 때 그들은 같은 곳에서 예:변경/추가 transaction isolation 제표에 대한 모든 저장되었습니다.
  13. 내가 및 DBA 사람을 찾을 수 있는 별도의 SQL 파일을 쉽게/경우에 편리하는 DBA 는 검토하는 내 SQL 물건입니다.
  14. 마지막으로 당신을 걱정할 필요가 없에 대한 SQL injection 공격 때문에 일부 게으른 회원의 팀을 사용하지 않은 매개 변수화 쿼리할 때 사용하는 embedded sql 을.

성능 이점에 대한 저장 프로시저를 종종 negligable.

더 많은 장점에 대한 저장 프로시저:

  • 리버스 엔지니어링을 방지하(으로 만든 경우에 암호화,물론)
  • 더 나은 중앙 집중화의 데이터베이스 액세스
  • 을 변경하는 기능 데이터 모델을 투명하게(필요 없이 배포하는 새로운 클라이언트);특히 유용하는 경우 여러 프로그램에 액세스 동일한 데이터 모델

나는 가을에 코드 측.우리가 만드는 데이터 액세스를 계층에 사용되는 모든 모든 애플리케이션(모두 웹 클라이언트),그래서 그것의 건조에는 관점입니다.간단하게 데이터베이스를 배포하기 때문에 우리는 그냥을 확인하는 테이블 스키마이 올바른 것입니다.그것은 간단 코드는 정비를 가지고 있지 않기 때문에 우리는 보고에서 소스 코드 및 데이터베이스입니다.

나지 않아 많은 문제를 가지고 있으로 단단한 결합으로 데이터 모델이기 때문에 보이지 않는 곳에 그것을 가능하게 정말 휴식을 연결할 수도 있습니다.응용 프로그램과 데이터가 본질적으로 결합되어 있다.

저장합니다.

오류가 발생한 경우 전표 또는 논리는 비트를 변경하지 않는,다시 컴파일해야 프로젝트입니다.게다가,그것은에 액세스할 수 있는 서로 다른 소스에서,단지 하나의 장소 당신은 코딩에서 쿼리를 귀하의 프로젝트입니다.

나는 생각하지 않은 유지하기 어렵게 저장되는 절차,당신은 코드들을 직접 데이터베이스에서나 별도의 파일에 첫째로,다음을 실행할 수 있습니다 그냥 그들을에 무엇이든 DB 을 설정해야 합니다.

장점에 대한 저장 프로시저:

더 많은 쉽게 코드를 검토합니다.

적 결합되고,따라서 더 쉽게 테스트됩니다.

더 많은 쉽게 조정합니다.

성능이 일반적으로 더 나은,의 관점에서의 네트워크 트래픽이 있는 경우 커서,또는 유사한 다음 없는 여러 데이터베이스

를 보호할 수 있는 데이터에 액세스하는 더 쉽게 제거에 직접 액세스 테이블,보안을 적용을 통해 발동-이것은 또한 당신이 찾을 수 있습니다 상대적으로 빠르게 어떤 업데이트하는 코드 테이블에 있습니다.

이 있는 경우에는 관련된 기타 서비스(예:보고 서비스),당신은 쉽게 찾을 수 있습니다 상점의 모든 당신의 논리에 저장되는 절차,보다는 코드에서와는 그것을 중복

단점:

하기 어렵게 관리에 대한 개발자:의 버전 관리는 스크립트:모두가 자신의 데이터베이스의 버전 관리 시스템 통합 데이터베이스와 IDE?

일부 상황에서 동적으로 생성 sql 에 코드를 가질 수 있는 것보다 더 뛰어난 성능이 저장 proc.을 만든 경우에 저장 proc(말 sp_customersearch)는 매우 복잡하고 수십 개의 매개변수해야하기 때문에,매우 유연하고 있는 아마 생성하는 훨씬 더 간단한 코드에서 sql 문을 수 있습니다.

한 주장할 수 있습니다 이것은 단순히 움직임에서 처리 SQL 웹 서버지만,일반적으로는 것은 좋은 일입니다.

다른 좋은 점에 대해 이 기술은 것을 찾는 경우에는 SQL 프로파일 당신이 볼 수있는 쿼리를 생성하고 디버깅하는 것보다 훨씬 쉽고 저장 proc 전화 20 개의 매개변수에 와서.

나는 다음과 같은 저장 프로시저인데,얼마나 많은 시간을 알 수 있었을 변경하려면 응용 프로그램을 사용하여 저장 프로시저를 생성하지 않았던 가동 중단 시간 응용 프로그램입니다.

의 큰 팬 Transact-SQL,조정형 쿼리를 입증하는 것은 매우 유용하게 사용하고 있습니다지 않을 썼다 모든 인라인 SQL 에서 약 6 년!

당신이 목록 2-프로 포인트를 위한 sprocs:

성능-하지 않습니다.에서 Sql2000 또는 더 중대한 쿼리 계획을 최적화는 매우 좋은,그리고 캐시됩니다.I'm sure that Oracle 등과 유사한 것들입니다.나는 생각하지 않는 경우가 있습니다에 대한 sprocs 성능을 위해 더 이상.

보안?왜 sprocs 것이 더 안전합니까?지 않는 한 당신은 매우 무담보 데이터베이스에 어쨌든 모든 액세스는 것에서 Dba 을 통해 또는 당신의 응용 프로그램입니다.항상 parametrise 모든 쿼리-지 인라인 무언가에서는 사용자 입력하고 괜찮을거야.

는 최고의 연습한 성과 anyway.

Linq 는 확실히 방법이 나는 새 프로젝트에 지금이다.이 비슷한 게시물.

@스

보안?왜 sprocs 것이 더 안전합니까?

에 의해 제안 Komradekatz,을 허용하지 않도록 설정할 수 있습 액세스 테이블(에 대한 사용자명/암호 콤보에 연결하는 DB)및 수 있 SP 에만 액세스할 수 있습니다.는 방법으로는 경우가 사용자 이름과 암호를 데이터베이스에 실행할 수 있습니다 SP 지 않고 있다 테이블에 액세스 또는 어떤 다른 부분의 DB.

(물론 실행 sprocs 줄 수 있습니다 그들은 모든 데이 그들이 필요로 하는 것에 따라 달라집 sprocs 는 사용할 수 있었다.제공하는 테이블에 대한 액세스를 제공합니다.)

이런 식으로 생각

당신은 4 웹 서버 및 윈도우를 사용하는 애플리케이션과 동일한 SQL 코드 지금 당신은 당신을 실현한 작은 문제가 있으로 SQl 코드 그래서 당신은 오히려......변경 proc 에서 1 위 나 밀어 코드 모든 웹 서버를 다시 설치하는 모든 데스크톱 응용 프로그램(clickonce 도움이 될 수 있습)에 있는 모든 windows 상자

내가 좋아 저장 프로시저

그것은 또한 더 쉽게 하는 성능 테스트에 대해 proc,에 넣어 쿼리 분석기 설계 io/시간 set showplan_text 에서 봐라

를 실행할 필요가 없 프로파일러를 정확히 확인되고 있는 무슨이라

내 2 센트

내가 선호하는지에 그들에 코드를 사용하여(ORM,지 인라인 또는 ad-hoc)그래서 그들에 의해 덮여 원본의 제어를 처리하지 않고 저장니다.sql 파일이 있습니다.

또한,저장된 절차 없이 본질적으로 안전합니다.를 작성할 수 있습니다 잘못된 쿼리와 sproc 으로 쉽게 인라인 요소입니다.매개 변수가 있는 인라인 쿼리할 수 있는만큼 안전한 sproc.

응용 프로그램을 사용하는 코드로 그것이 무엇 최고:핸들 논리입니다.
사용자의 데이터베이스에 그것이 무엇을위한 최고의:데이터를 저장합니다.

디버깅할 수 있는 절차를 저장 하지만 당신은 쉽게 찾을 디버깅 및 maintaing 논리에 코드입니다.일반적으로 당신은 결국 다시 컴파일하는 코드를 변경할 때마 데이터베이스 모델이다.

또한 저장된 절차와 선택적 검 매개 변수는 매우 inneficient 있기 때문에 사전에 지정하는 가능한 모든 매개변수하고 복잡한 검색은 사용이 불가능한 경우도 있기 때문에 당신은 예측하는 방법을 많은 시간을 매개 변수가 될 것입니에서 반복 검색.

할 때 보안을 위해,저장 프로시저는 훨씬 더 안전합니다.몇 가지가 있다고 주장하는 모든 액세스 응용 프로그램을 통해 어쨌든.많은 사람들은 잊어버리는 것은 대부분의 보안 사고에서 온 안에는 회사입니다.생각하는 방법에 대해 많은 개발자가 알고있는"숨"사용자 이름과 암호를 위한 응용 프로그램?

또한,MatthieuF 지적,성능 수 있습이 훨씬 향상으로 인해 적은 라운드 여행은 사 응용 프로그램(부에서는 데스크탑이나 웹 서버)그리고 데이터베이스 서버입니다.

내 경험에 대한 추상화 데이터 모델을 저장 프로시저를 통해도 크게 향상되 관리할 수 있습니다.으로는 사람이 있었을 유지하는 데이터베이스의 과거에는,그러한 구제에 직면했을 때 필요한 모델을 변경할 수 있을 간단히 변경하거나 저장 프로시저는 두고 가 변경이 완전히 투명하는 모든 외부용됩니다.많은 시간을 원하는 응용 프로그램이 없는 단 하나의 지적에 있는 데이터베이스는 다른 응용 프로그램,보고 솔루션,등등.그래서 아래로 추적하는 모든 사람의 영향을 받는 점은 번거 로움이 될 수 있습으로 오픈한 액세스 테이블이 있습니다.

나 또한 검사에서 플러스에 대한 열 두고 SQL 프로그래밍에 사람들의 손에서 전문고를 위한 SPs 훨씬 쉽게 분리하고 테스트/코드 최적화.

하나의 단점을 보는 많은 언어를 허용하지 않 통과 테이블의 매개변수,그래서 전달하는 번호를 알 수 없는 데이터 값을 성장할 것,그리고 몇 가지 언어로는 여전히 처리할 수 없습니다 여러 개 검색 결과에서 저장된 절차(이 있지만 후기지 않을 만들 SPs 모든 보다 더 인라인 SQL 그 점에서).

중 하나 제안서는 Microsoft 테크 에드 세션에 보안 내가 참석하는 모든 통화를 통해 저장되었고 직접 액세스 거부하는 테이블이 있습니다.이 접근 방식을 청구를 제공하는 것으로 추가 보안입니다.나는 확실하지 않다면 그것은 그것의 가치는 다만,보안을 위해 하지만 경우에 당신은 이미 사용하여 저장된 발동,그것은 상처 없습니다.

확실히 유지하기 쉽다면 당신이 그것에 저장되는 절차입니다.이 있는 경우에 어려운 논리 관련되는 것으로 미래의 변화에 그것은 확실히 좋은 아이디어를 넣어 데이터베이스에는 여러 개 있는 경우 클라이언트가 연결했습니다.예를 들어 난 작업 응용 프로그램에 지금 있는 최종 사용자는 웹 인터페이스 및 관리 데스크탑 응용 프로그램을 모두 공유하는 데이터베이스(분)고 난을 유지하려고 많은 논리에 데이터베이스로 가능합니다.이것은 완전한 예제 건조한 원리.

나는 단단히 측에 저장되었고 가정하고 당신을 속이지 않고 사용하는 dynamic SQL 에서는 저장된 proc.첫째,를 사용하여 저장된 발동할 수 있는 dba 권한을 설정하에 저장되어 발동수준 및 표준다.이것은 중요하지만 퇴치 SQL injection attacts 그러나를 방지하기로 내부에서 직접 데이터베이스에 액세스하고 변경하는 것들입니다.이 방법을 방지하는 데 사기입니다.어떤 데이터베이스를 포함하는 개인정보(Ssn,신용 카드 번호 등등)또는 어쨌든에서 만드는 금융 거래 해야한 액세스를 제외하고 strored 절차가 있습니다.당신이 사용하는 경우 다른 어떤 방법 당신은 떠나의 데이터베이스를 열고 넓은 개인을 위해서는 회사를 만들은 가짜는 금융 거래를 훔치거나 사용할 수 있는 데이터에 대한 신원 도용입니다.

저장 프로시저는 또한 훨씬 쉽게 유지하고 성능을 조정보 SQL 전송됩니다.그들은 또한 허용 dba 는 방법이 무엇을 보고 충격을 데이터베이스의 구조 변화가 있을 것이는 방법에 데이터 액세스할 수 있습니다.I've never met 좋은 dba 는 것을 허용한 동적 데이터베이스에 대한 액세스 권한.

우리는 저장 프로시저를 사용하여 Oracle DB 내가 어디서 지금 작동합니다.우리는 또한 사용을 파괴.저장된 모든 절차를 만들어집니다.pkb&.pks 파일에 저장한 파괴.나는 in-line SQL 전에 그것은 고통이다!나는 훨씬 선호하는 방법으로 우리는 여기에서 그것을 할.을 만들고 새로운 테스트 절차를 저장하는 것보다 훨씬 쉽다에서 당신의 코드입니다.

테레사

작은 로그

다른 작은 프로 저장된 절차는 언급되지 않았:올 때 SQL 트래픽,sp-기반 데이터 액세스 생성 적은 트래픽이다.이것은 중요한 때 당신은 트래픽을 모니터링을 위한 분석 및 프로파일링-로그 될 것입니다 훨씬 작고 읽을 수 있습니다.

나의 큰 팬 저장된 절차에,하지만 난 그들을 사용하는 하나의 상태:

면 쿼리가 매우 크다,그것은 더 나은 데이터베이스에 저장한 저장 프로시저로 보내는 대신 그것은에서의 코드입니다.는 방법을 보내는 대신에 거대한 ammounts 의 문자열 자 응용 프로그램에서 서버는 데이터베이스,만 "EXEC SPNAME" 명령을 전송됩니다.

이것은 잔인한 데이터베이스 서버 및 웹 서버지 않는 동일한 네트워크에서(예를 들어,인터넷 커뮤니케이션).도하지 않을 경우,경우에 너무 많은 스트레스의 많은 것을 의미한 낭비되는 대역폭.

하지만 사람들은 그들이 그렇게 끔찍한 관리할 수 있습니다.나는 그들을 피하기로 내가 할 수 있습니다.

SQL 저장 proc 지 않는 성능 향상을 쿼리

분명히 잘 저장 프로시저를 사용하는 여러 가지 이점을 통해 생성 SQL 에 코드입니다.

  1. 귀하의 코드 구현 및 SQL 가 서로 독립적입니다.
  2. 코드가 쉽게 읽을 수 있습니다.
  3. 쓰면이 여러 번 사용할 수 있습니다.
  4. 수단
  5. 를 제공 할 필요가 없 내부 세부 사항을 프로그래머에 대한 데이터베이스입니다.etc.,etc.

저장 프로시저는 MORE 유지 관리하기:

  • 당신이하지 않는 다시 컴파일해야의 C#응용 프로그램을 변경할 때마다 일부 SQL
  • 당신은 결국 다시 사용하 SQL 코드입니다.

코드 반복은 당신이 할 수있을 때 당신을 구축을 위해 노력하고 유지 보수 응용 프로그램입니다!

무슨 일을 발견하면 오류 로직 해결해야 할 여러 곳에서?당신이 더 적절을 변경하는 것을 잊지 마지막 당신을 복사&붙여넣은 당신의 코드입니다.

제 생각에는,성능 및 보안을 얻는 추가 플러스입니다. 당신은 여전히 작성 불안/비효율적이 값을 저장합니다.

하기가 더 쉽게 다른 DB-아저 포트

그것은 매우 어려운 스크립트의 모든 저장 프로시저를 창조를 위해 다른 DB.사실에서-그것은 내보내는 것보다 당신의 테이블이 없기 때문에 기본/외부 키를 걱정 없습니다.

@Terrapin-sprocs 만큼 취약하다 주입 공격입니다.내가 말했듯이:

항상 parametrise 모든 쿼리-지 인라인 무언가에서는 사용자 입력하고 괜찮을거야.

는 간 sprocs 며 dynamic Sql.

나는 확실하지 않지를 다시 컴파일하는 앱은 장점이 있습니다.내 말은,당신은 실행 단위 테스트에 대해 해당 코드(둘 모두 응용 프로그램 및 DB)로 가기 전에는 다시 살 anyway.


@남자-그래서 당신 sprocs 않을 제어할 수 있게 하는 응용 프로그램 사용자들만 수행할 수 있습니 sproc,하지 않는 기본다.

나의 질문이 될 것이다:모든 액세스 응용 프로그램을 통해,를 사용하여 연결하고 사용자는 제한된 권리를 업데이트/삽입하는 등,이 추가 수준의 보안을 추가 또는 추가 administration?

내 의견은 아주 많습니다.한 경우에는 손상된 응용 프로그램들이 다시 쓰고 그들은 다른 공격을 많이들 사용하실 수 있습니다.

Sql 주입 여전히 수행에 대한 그 sprocs 는 경우 그들은 동적으로 인라인 코드,그래서 황금 규칙을 적용하고,모든 사용자 입력해야 합 parametrised.

뭔가가 나는 보지 못했 언급된 지금까지:을 알고있는 사람들이 데이터베이스의 최고지 않는 항상 사람들을 쓰는 응용 프로그램 코드입니다.저장 프로시저를 데이터베이 사람들을 인터페이스 프로그래머지 않는 정말 배우고 싶어하는 많은에 대한 SQL.큰--특히 유산이다-데이터베이스지 않는 가장 쉬운 것들을 완전히 이해하도록,프로그래머의 경우에는 그냥 선호하는 간단한 인터페이스들이 그들이 필요한 것:자 Dba 는 어떻게 가입 17 테이블을 합니다.

즉,사용되는 언어로 쓰는 저장된 절차(PL/SQL 되는 악명 높은 예)같은 예쁜 잔인하다.그들은 일반적으로 제공하지 않는 모든의 체류하고자 할 경우에서 볼 수 오늘날의 인기있는 명령적,객체 지향 프로그래밍,또는 기능적 언어입니다.생각 COBOL.

그래서,저장 프로시저는 단순한 추상화 관계형 세부 정보 보다는 오히려는 사람들이 포함됩니다.

나는 일반적으로 쓰 OO 코드입니다.내가 의심되는 대부분의 아마 당신은,너무입니다.그런 맥락에서,그것은 보인다는 것을 분명히 모든 비즈니스의 논리를 포함한 SQL 쿼리-그리고 클래스에서 정의 합니다.분 논리는 그것의 일부에 있는 객체 모델과의 일부에서는 데이터베이스는 더 나은 이 비즈니스 논리로 사용자 인터페이스가 있습니다.

많은 이전에 대한 답변 보안 혜택의 저장되었습니다.이러한 두 가지 범주로 나눌 수있다:

1)제한에 직접 액세스하는 데이터입니다.이것은 확실히 중요한 어떤 경우에 발생할 경우,한,그 저장 프로시저는 거의 유일한 옵션을 제공합니다.내 경험에 의하면,이러한 경우는 예외 규칙보다,그러나입니다.

2)SQL injection/매개변수화 쿼리를 처리합니다.이것이 반대입니다.인라인 SQL-심지어는 동적으로 생성된 인라인 SQL-수 있습니다 그냥 완전 매개 변수화로 저장된 모든 proc 고 그것을 할 수 있습에서도 쉽게 모든 현대적인 언어치가 소금이다.이 없는 장점 중 하나다.("게으른 개발자를 귀찮게 하지 않을 수도 함께 사용하여 매개변수"유효하지 않은킨다.개발자가 있는 경우에 귀하의 팀을 다 연결하여 사용자 데이터로 SQL 을 대신 사용하여 매개변수,당신이 먼저 하려고 그들을 교육하고,당신은 그들이 작동하지 않는 경우,이용하는 것처럼으로 개발자가 다른 어떤 나쁜,명백히 해로운 습관입니다.)

나는 거대한 후원자의 코드를 통해 SPROC 습니다.번호를 하나의 이유 코드를 유지하는 단단히 결합되고,그 다음 가까운 두 번째는 편의성 제어 소스 없이 많은 사용자 지정 유틸리티에서 그것을 당기.

에서 우리의 DAL 가 있는 경우에 우리는 매우 복잡한 SQL 문을,우리는 일반적으로 그들을 포함한 리소스 파일 및 필요에 따라 업데이트(이 될 수 있는 별도의 회 뿐만 아니라,교체당 db,etc...).

이것은 우리의 코드 및 우리의 sql 저장된 통화에서 같은 버전을 제어하지 않고,"잊고"를 실행할 외부 응용 프로그램를 위한 업데이트입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top