2011-11-23 84 views
0

正常查詢中使用VB6和SQL Server 2000使從存儲過程

我想在存儲過程轉換爲普通查詢

存儲過程:

Alter PROC [dbo].[proc_New] 

    @CCODE VARCHAR(100), 
     @EmpCode VARCHAR(100) 
AS 
BEGIN 
    DECLARE @ID VARCHAR (5) 
    DECLARE @Des VARCHAR(10) 
    DECLARE @SQL VARCHAR(1000) 
    DECLARE @Flag INT 
    SELECT @Flag=0 
     SELECT @SQL = 'SELECT PERSONID FROM T_PERSON WHERE ' 
    IF @CCODE<>'All' 
     BEGIN 
      IF @Flag=1 
      BEGIN 
       SELECT @SQL = @SQL+' AND (CCODE IN ('''[email protected]+'''))' 
      END 
      ELSE 
      BEGIN 
       SELECT @SQL = @SQL+' (CCODE IN ('''[email protected]+'''))' 
       SELECT @Flag=1 
      END 
     END 
    IF @EMPCODE<>'All' 
     BEGIN 
      IF @Flag=1 
      BEGIN 
       SELECT @SQL = @SQL+' AND (EMPCODE IN ('''[email protected]+'''))' 
      END 
      ELSE 
      BEGIN 
       SELECT @SQL = @SQL+' (EMPCODE IN ('''[email protected]+'''))' 
       SELECT @Flag=1 
      END 
     END 

IF @SQL = 'SELECT EmpCode FROM EMPMST WHERE ' SELECT @SQL = 'SELECT EmpCode FROM EMPMST' 
INSERT INTO table EXEC(@SQL) 
GO 

步驟解釋...

  • 我傳遞了2個參數值,如emp_code或All和company_code o r全部。

  • 在第一個參數(Emp_Code):如果該值是「全部」是指則查詢返回的所有emp_code或者如果值是「001」,然後查詢返回「001」 emp_code只有

  • 在第二個參數(Company_Code)中:如果值爲「全部」則表示然後查詢返回所有公司的所有emp_code(例如:IBM,SoftTech等)或者如果值爲「IBM」則表示然後查詢返回所有emp_code該公司(IBM)

上面的存儲過程工作正常,但我想轉換爲正常查詢。

任何人可以幫助我

需要查詢幫助

+0

你什麼意思通過正常的查詢做?非動態? –

+0

提示:您可以更改基本查詢以包含WHERE 1 = 1,那麼無論您是否添加了一些「AND 」,您都將擁有正確的語法。然後你可以刪除'@ Flag'和最後一個'IF'。 –

+0

你的查詢實際上在做什麼或者你想要實現什麼樣的查詢?所以我們可以考慮替代查詢 –

回答

2

下面是簡單的查詢,請與本嘗試:

SELECT PERSONID FROM T_PERSON WHERE 
    CCODE = (
     CASE WHEN @CCODE = 'ALL' THEN CCODE 
     ELSE @CCODE END 
     ) 
    AND 
    EMPCODE = (
     CASE WHEN @EMPCODE = 'ALL' THEN EMPCODE 
     ELSE @EMPCODE 
     END 
     ) 
0

您不能直接做在SQL存儲過程之外,你的存儲過程有幾個if/else語句,沒有結構在SQL查詢中存在要做到這一點,如果你想達到這個目標,你將需要使用訪問它的語言(例如c#/ php/coldfusion/etc)構建驅動邏輯,然後執行單個查詢。

你從哪種語言調用存儲過程,或者直接來自SQL服務器?

編輯:我有一段時間沒有使用VB6,所以我不記得如何在VB中寫這個,但基本上是從存儲過程複製邏輯來構建查詢,然後直接發送查詢從VB不讓存儲過程做到這一點。

例如

Dim sql As String 
If CCODE <> 'All' 
     sql = 'SELECT PERSONID FROM T_PERSON WHERE AND (CCODE IN (' & CCODE & '));' 
     {send the query to sql server} 
End If 
+0

使用VB6語言 – Gopal