使用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)
上面的存储过程工作正常,但我想转换为普通查询。
任何人都可以帮助我
需要查询帮助
答案 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