Sql 从存储过程进行常规查询

Sql 从存储过程进行常规查询,sql,sql-server,stored-procedures,sql-server-2000,Sql,Sql Server,Stored Procedures,Sql Server 2000,使用VB6和sqlserver2000 我想将存储过程转换为普通查询 存储过程: 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

使用VB6和sqlserver2000

我想将存储过程转换为普通查询

存储过程:

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
程序说明

我正在传递两个参数值,如emp_代码或All和company_代码或All

在第一个参数Emp_代码中:如果值为All means,则查询返回所有Emp_代码;如果值为001,则查询仅返回001 Emp_代码

在第二个参数Company_Code中:如果值为All means,则查询返回所有公司(例如IBM、SoftTech等)的所有emp_代码;如果值为IBM means,则查询返回该公司IBM的所有emp_代码

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

有人能帮我吗


需要查询帮助

您不能在存储过程之外的SQL中直接执行此操作,您的存储过程有多个if/else语句,SQL查询中不存在执行此操作的结构,如果要实现这一点,您需要从使用c/php/coldfusion/etc访问它的语言中构建脚本逻辑,然后执行单独的查询

您是从哪种语言调用存储过程,还是直接从SQL server调用存储过程

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

e、 g


以下是更简单的查询,请尝试以下操作:

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
        )

你所说的普通查询是什么意思?非动态?提示:您可以将基本查询更改为包含WHERE 1=1,那么无论是否添加了一些,您都将拥有正确的语法。然后,您可以删除@标志和最后一个IF。您的查询实际在做什么,或者您希望从该查询中实现什么??这样我们就可以想出替代方案queries@MGA,我提供了存储过程的解释…..它是一个存储过程-就像存储在SQL Server中一样-它与存储无关。。。
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
        )