Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL Server中将数值转换为INT的正确方法_C#_Sql Server 2008_Casting_Coalesce - Fatal编程技术网

C# 在SQL Server中将数值转换为INT的正确方法

C# 在SQL Server中将数值转换为INT的正确方法,c#,sql-server-2008,casting,coalesce,C#,Sql Server 2008,Casting,Coalesce,我得到一个无效的强制转换异常,因为我的COALESCE正在处理一个数值数据类型值和一个int数据类型值 查询运行正常,但C引发了无效的强制转换异常 我在COALESCE中添加了一个cast,但仍然得到无效的cast异常 问题:我在我的联合体中正确地铸造了这个吗 错误中涉及的属性声明如下: 发生错误的地方就在这里 “我的数据助手”定义为: 下面是我的合并表达式1的数值数据类型 您必须强制转换整个表达式: CAST(COALESCE((SELECT ...),(SELECT ...)) AS INT

我得到一个无效的强制转换异常,因为我的COALESCE正在处理一个数值数据类型值和一个int数据类型值

查询运行正常,但C引发了无效的强制转换异常

我在COALESCE中添加了一个cast,但仍然得到无效的cast异常

问题:我在我的联合体中正确地铸造了这个吗

错误中涉及的属性声明如下:

发生错误的地方就在这里

“我的数据助手”定义为:

下面是我的合并表达式1的数值数据类型


您必须强制转换整个表达式:

CAST(COALESCE((SELECT ...),(SELECT ...)) AS INT) AS StartingMembershipCount,
如果子查询未返回任何行,则SELECT中的强制转换或类型不适用

或者,您可以强制转换整个第一个子查询,因为第二个子查询应始终返回一个结果:

COALESCE(CAST((SELECT ...) AS INT), (SELECT ...)) AS StartingMembershipCount,
因为第二个总是返回一个结果,所以实际上根本不需要为null。使用ISNULL应该可以解决以下问题:

ISNULL(CAST((SELECT ...) AS INT), (SELECT ...)) AS StartingMembershipCount,
ISNULL的缺点是,如果需要第三个参数,它不能支持第三个参数;这不是标准。优点是结果不可为null,因此可以直接使用GetInt32


顺便说一句,当我在C中遇到异常时,我通常会临时切换到r.GetValueordinal,以对象形式返回值,当然,您不能将该值赋给int变量,然后检查其类型。

很好的解释。谢谢,这很有帮助
COALESCE((
-- Expression 1
SELECT CAST(n.TOTAL_MBR AS INT)
FROM
usr_kiw_cus_certified n INNER JOIN
(SELECT ClubId, min(AsOfDate) AsOfDate FROM
  (SELECT ukm.MASTER_CUSTOMER_ID ClubId, ukm.AS_OF_DATE AsOfDate FROM usr_kiw_cus_certified ukm WHERE ukm.AS_OF_DATE > @StartDate AND ukm.master_customer_id = c.MASTER_CUSTOMER_ID) as temp
 GROUP BY ClubId) AS datetable 
 ON datetable.ClubId = n.MASTER_CUSTOMER_ID and n.AS_OF_DATE = datetable.AsOfDate
 ),

 -- Expression 2
(SELECT COUNT(cr.MASTER_CUSTOMER_ID) 
FROM cus_relationship cr 
WHERE cr.RELATED_MASTER_CUSTOMER_ID = c.MASTER_CUSTOMER_ID
AND cr.RELATIONSHIP_TYPE = 'employment' 
GROUP BY cr.RELATED_MASTER_CUSTOMER_ID
)) AS StartingMembershipCount,
CAST(COALESCE((SELECT ...),(SELECT ...)) AS INT) AS StartingMembershipCount,
COALESCE(CAST((SELECT ...) AS INT), (SELECT ...)) AS StartingMembershipCount,
ISNULL(CAST((SELECT ...) AS INT), (SELECT ...)) AS StartingMembershipCount,