Сделать обычный запрос из хранимой процедуры - PullRequest
0 голосов
/ 23 ноября 2011

Использование 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 ('''+@CCODE+'''))'
            END
            ELSE
            BEGIN
                SELECT @SQL = @SQL+' (CCODE IN ('''+@CCODE+'''))'
                SELECT @Flag=1
            END
        END
    IF @EMPCODE<>'All' 
        BEGIN
            IF @Flag=1 
            BEGIN
                SELECT @SQL = @SQL+' AND (EMPCODE IN ('''+@EMPCODE+'''))'
            END
            ELSE
            BEGIN
                SELECT @SQL = @SQL+' (EMPCODE IN ('''+@EMPCODE+'''))'
                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 или All.

  • В 1-м параметре (Emp_Code): если значение «Все», значит запрос возвращает все emp_code или Если значения «001», запрос возвращается«001» emp_code только

  • Во 2-м параметре (Company_Code): если значение равно «Все», то запрос возвращает все emp_code для всехкомпания (например: IBM, SoftTech и т. д.) или Если значение равно «IBM», значит, запрос вернет все emp_code для этой компании (IBM)

Работает вышеуказанная хранимая процедурахорошо, но я хочу преобразовать в обычный запрос.

Кто-нибудь может мне помочь

Нужна помощь в запросе

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Ниже приведен более простой запрос, попробуйте выполнить следующее:

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 голосов
/ 23 ноября 2011

Вы не можете напрямую сделать это в 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
...