Sql 从存储过程进行常规查询
使用VB6和sqlserver2000 我想将存储过程转换为普通查询 存储过程: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
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
)