从存储过程进行常规查询

时间:2011-11-23 09:19:50

标签: sql sql-server stored-procedures sql-server-2000

使用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。

  • 在第一个参数(Emp_Code)中:如果值为“全部”则表示查询返回全部emp_code或如果值为“001”则查询返回“ 001“仅emp_code

  • 在第二个参数(Company_Code)中:如果值为“全部”则表示查询返回所有公司的所有emp_code(例如:IBM,SoftTech等)或者如果值为“IBM”,则表示查询返回该公司的所有emp_code(IBM)

上面的存储过程工作正常,但我想转换为普通查询。

任何人都可以帮助我

需要查询帮助

2 个答案:

答案 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
        )

答案 1 :(得分:0)

你不能在存储过程之外的SQL中直接执行此操作,你的存储过程有几个if / else语句,sql查询中没有结构来执行此操作,如果要实现此目的,则需要构建从访问它的语言(即c#/ php / coldfusion / etc)中获取逻辑,然后执行单个查询。

您从哪个语言调用存储过程,或者直接来自SQL服务器?

编辑:我有一段时间没有使用VB6所以我不记得如何在VB中编写这个,但你基本上是从存储过程中复制逻辑来构建查询然后直接从VB发送查询,不让存储过程执行。

e.g。

 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