我试图在C#项目中使用此存储过程,其中我发送的参数用于确定哪种SQL查询将要执行可以使用,但在尝试刷新数据源在C#中,它永远不会返回任何记录:在C#中使用带有T-SQL IF/ELSE的存储过程,并带参数
IF(@productName = '' AND @productCode = '')
BEGIN
SELECT a.COD_PRODUCTO,
a.NOMBRE_PRODUCTO,
CONVERT(DECIMAL(10, 2), b.PRECIO_UNITARIO) AS PRECIO_UNITARIO,
CONVERT(INT, a.UNIDADES_DISPONIBL) AS UNIDADES_DISPONIBL,
CONVERT(INT, a.UNIDADES_TRANSITO) AS UNIDADES_TRANSITO,
b.TIPO_CLIENTE,
b.NUM_EMPRESA
FROM sysadm.IN_PRODUCTOS a INNER JOIN sysadm.IN_PRECIOS_TIPOCLT b
ON a.COD_PRODUCTO = b.COD_PRODUCTO
AND a.NUM_EMPRESA = b.NUM_EMPRESA
AND b.TIPO_CLIENTE = @ClientType
AND B.NUM_EMPRESA NOT IN('50', '60')
END
ELSE IF (@productName <> '' AND @productCode = '')
BEGIN
SELECT a.COD_PRODUCTO,
a.NOMBRE_PRODUCTO,
CONVERT(DECIMAL(10, 2), b.PRECIO_UNITARIO) AS PRECIO_UNITARIO,
CONVERT(INT, a.UNIDADES_DISPONIBL) AS UNIDADES_DISPONIBL,
CONVERT(INT, a.UNIDADES_TRANSITO) AS UNIDADES_TRANSITO,
b.TIPO_CLIENTE,
b.NUM_EMPRESA
FROM sysadm.IN_PRODUCTOS a INNER JOIN sysadm.IN_PRECIOS_TIPOCLT b
ON a.COD_PRODUCTO = b.COD_PRODUCTO
AND a.NUM_EMPRESA = b.NUM_EMPRESA
AND b.TIPO_CLIENTE = @ClientType
AND B.NUM_EMPRESA NOT IN('50', '60')
AND a.NOMBRE_PRODUCTO LIKE '%' + @productName + '%'
END
ELSE IF (@productName = '' AND @productCode <> '')
BEGIN
SELECT a.COD_PRODUCTO,
a.NOMBRE_PRODUCTO,
CONVERT(DECIMAL(10, 2), b.PRECIO_UNITARIO) AS PRECIO_UNITARIO,
CONVERT(INT, a.UNIDADES_DISPONIBL) AS UNIDADES_DISPONIBL,
CONVERT(INT, a.UNIDADES_TRANSITO) AS UNIDADES_TRANSITO,
b.TIPO_CLIENTE,
b.NUM_EMPRESA
FROM sysadm.IN_PRODUCTOS a INNER JOIN sysadm.IN_PRECIOS_TIPOCLT b
ON a.COD_PRODUCTO = b.COD_PRODUCTO
AND a.NUM_EMPRESA = b.NUM_EMPRESA
AND b.TIPO_CLIENTE = @ClientType
AND B.NUM_EMPRESA NOT IN('50', '60')
AND a.COD_PRODUCTO = @productCode
END
END
是否有可能用那样的参数?如果IF/ELSE没有被使用,这些参数就可以工作,但是我需要这样做,以便根据需要改变查询,除非有更好的选项,非常感谢您的帮助!
我很困惑......如果这是一个存储过程,则不会在C#代码只是调用存储过程本身?为什么存储过程中的代码*与C#代码的视角有所不同? – David 2015-04-03 22:22:54
尝试它比在这里询问要快,但是他们(参数)应该按预期工作。不要紧,你如何在存储过程中使用这些参数。只是通过它们 – Steve 2015-04-03 22:26:11
我从数据源配置向导调用存储过程时,当我尝试测试它,我得到一个错误,说没有记录已被返回,但是,如果我测试SQL服务器中的存储过程,它的工作原理。在使用新参数包含IF/ELSE之前,C#中的存储过程工作良好,但现在不是,所以如果C#支持使用params进行这种评估,那么我就是在这样做。谢谢。 – saman0suke 2015-04-03 22:33:56