2010-04-16 1 views
1

기본적으로 PHP로 변환하는 ASP 웹 사이트가 있습니다. 우리는 여전히 DB를 위해 MSSQL 서버를 사용하고 있습니다 - 움직이지 않습니다.저장 프로 시저 : PHP에서 전달 된 변수가 쿼리 문자열의 후반 부분을 변경합니다.

ASP에는 이제 실행중인 거대한 SQL 쿼리가 포함 된 파일이 있습니다. 여기에는 많은 페이지가 포함되어 있으며 이는 발생하는 간단한 버전입니다. 페이지 A, B 및 C는 모두이 포함 파일을 사용하여 목록을 반환합니다.

ASP에서 페이지 A는 변수 A를 통해 포함 파일로 전달합니다. 페이지 B는 변수 B를 통과하고 페이지 C는 변수 C를 통과하는 식입니다.

sql = "SELECT * from table_one LEFT OUTER JOIN table_two ON table_one.id = table_two.id"

후, 부모 페이지를 통해 전달 된 변수에 따라 (ASP 기억), 추가

Select Case sType 
Case "A" 
sql = sql & "WHERE LOWER(column_a) <> 'no' AND LTRIM(ISNULL(column_b),'') <> '' ORDER BY column_a 
Case "B" 
sql = sql & "WHERE LOWER(column_c) <> 'no' ORDER BY lastname, firstname 
Case "C" 
sql = sql & "WHERE LOWER(column_f) <> 'no' OR LOWER(column_g) <> 'no' ORDER BY column_g 

로 :

포함 파일을이 같은 SQL 쿼리를 구축 SQL 쿼리의 두 번째 부분으로 추가 된 모든 문자열은 이전과 다릅니다. 하나의 변수 만 대치 될 수있는 것은 아닙니다.

PHP를 통해 저장 프로 시저에 전달하는 varchar 입력을 기반으로이 케이스/스위치를 저장 프로 시저로 어떻게 변환합니까?

이 저장 프로시 저는 실제로 약 20 페이지에 대한 쿼리 목록을 처리 할 것입니다. 따라서 무거운 것이고 이것은 첫 번째 주요 복잡한 것입니다. 나는 거기에 도착하고있다! 나는 또한 MySQL에 익숙하다. 그들은 그것이 다르다는 것이 아닙니다. : P

미리 도움을 주셔서 감사합니다.

스테파니

답변

1

어떻게 번역 할 내가 PHP를 통해 저장 프로 시저에 전달하는 VARCHAR 입력에 기반/저장 프로 시저로 전환이 경우,? SQL Server의

상기 CASE expression는 흐름 제어 IF/ELSE 등에 하지이다.

사용 : 우리가 ominous tale of Little Bobby Tables을 잊는다

DECLARE @SQL NVARCHAR(max) 
    SET @SQL = N'SELECT ...' 

    SET @SQL = @SQL + CASE sType 
         WHEN 'A' THEN ' WHERE ... ' 
         WHEN 'B' THEN ' WHERE ... ' 
         WHEN 'C' THEN ' WHERE ... ' 
         ELSE ' ' 
         END 
BEGIN 

    EXEC sp_executesql @SQL 

END 

, 최고의 The curse and blessings of Dynamic SQL을 읽을 수 있습니다.

+0

haha. 동적 SQL 페이지는 길다.하지만 내가 할 수있는 것을 읽을 것이다. 주사의 위험성을 확실히 알고 있으므로 감사하겠습니다. 또한 인쇄 된 코드뿐만 아니라 XKCD 만화에서도 완전히 승리합니다. 감사합니다. –

1

저장 프로 시저에서 동적 SQL을 수행해야합니다. 이 링크는 당신을 도울 것입니다 : http://www.sommarskog.se/dynamic_sql.html

+0

아이러니하게도 나는 게시 한 직전에 그 페이지를 발견했습니다. 정말 고맙습니다! –