ODBC Comman 添加一个值的多个参数
ODBC Comman add multiple parameters with one value
我有一个具有多个参数的 postgresql 查询,我了解在 C# 中使用 OdbcCommand 的参数是如何基于位置而不是基于名称的,但是所有参数都将具有相同的值,我想知道是否有只分配一次参数值而不是四次的方法。
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
而不是
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
下面是我将要使用的查询
SELECT cp.blkofbusid AS LOB,
cp.clientid AS GroupID,
cp.locationname AS Division,
benefitplanid,
( select clientname from client where clientid=? and blkofbusid <> 'HOLD')
FROM clientpricovebenefitplan cp
LEFT OUTER JOIN clientlocation cl
ON cp.clientid = cl.clientid
AND cp.locationname = CASE WHEN cp.locationname <> 'N/A' THEN cl.locationname ELSE cp.locationname END
WHERE cp.clientid =?
AND cp.locationname IN
(
SELECT CASE
WHEN cpb.locationname <> 'N/A' AND (SELECT Count(a.locationname) FROM clientpricovebenefitplan a WHERE a.locationname <> 'N/A' AND a.clientid =? and blkofbusid <> 'HOLD') > 0 THEN
locationname
WHEN (SELECT Count(b.locationname) FROM clientpricovebenefitplan b WHERE b.locationname <> 'N/A' AND b.clientid =? and blkofbusid <> 'HOLD') = 0 THEN
'N/A'
END AS divcode
FROM clientpricovebenefitplan cpb
WHERE
cpb.clientid =?
)
ORDER BY
division
如果使用 ODBC 则不可能。在 ODBC 中,命名参数仅用于存储过程的调用,不能用于其他 SQL 语句。 https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters?view=sql-server-ver15.
但是,如果使用 .Net Oracle 驱动程序而不是 ODBC 是可能的。
我有一个具有多个参数的 postgresql 查询,我了解在 C# 中使用 OdbcCommand 的参数是如何基于位置而不是基于名称的,但是所有参数都将具有相同的值,我想知道是否有只分配一次参数值而不是四次的方法。
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
而不是
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
下面是我将要使用的查询
SELECT cp.blkofbusid AS LOB,
cp.clientid AS GroupID,
cp.locationname AS Division,
benefitplanid,
( select clientname from client where clientid=? and blkofbusid <> 'HOLD')
FROM clientpricovebenefitplan cp
LEFT OUTER JOIN clientlocation cl
ON cp.clientid = cl.clientid
AND cp.locationname = CASE WHEN cp.locationname <> 'N/A' THEN cl.locationname ELSE cp.locationname END
WHERE cp.clientid =?
AND cp.locationname IN
(
SELECT CASE
WHEN cpb.locationname <> 'N/A' AND (SELECT Count(a.locationname) FROM clientpricovebenefitplan a WHERE a.locationname <> 'N/A' AND a.clientid =? and blkofbusid <> 'HOLD') > 0 THEN
locationname
WHEN (SELECT Count(b.locationname) FROM clientpricovebenefitplan b WHERE b.locationname <> 'N/A' AND b.clientid =? and blkofbusid <> 'HOLD') = 0 THEN
'N/A'
END AS divcode
FROM clientpricovebenefitplan cpb
WHERE
cpb.clientid =?
)
ORDER BY
division
如果使用 ODBC 则不可能。在 ODBC 中,命名参数仅用于存储过程的调用,不能用于其他 SQL 语句。 https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters?view=sql-server-ver15.
但是,如果使用 .Net Oracle 驱动程序而不是 ODBC 是可能的。