2011-09-20 117 views
0

我读了关于SQL Server的函数Cast and Convert,但我有一点点不同的要求。我想声明所有的存储过程参数为varchar以消除C#中所需的大部分转换代码,同时使用AddWithValue方法添加参数。存储过程中参数的条件数据类型转换

我想尽可能多的代码放在数据库本身尽可能减少前端代码。我的存储过程包含INSERTUPDATE查询。我想在查询本身或其他更好的方式中转换参数的数据类型。 CAST函数适用于转换,但如果我还想在参数没有值时传递NULL,该怎么办?

例如:

@Udate varchar(10), 
@Uamount varchar(50) 

INSERT INTO table (Name, Udate, Uamount) 
    VALUES (@Name, Cast(Udate As DateTime), Cast(Uamount As Decimal) 

在查询中使用CAST的缺点本身是该查询的可读性变差与许多CAST功能。我还能在哪里转换数据类型以及如何检查空值?

+5

我不认为这种方法是一个非常好的主意。仅仅因为你想避免*不必要的*在C#中输入你的调用,你基本上把所有的东西都变成了'varchar',然后'CAST'回来......对我来说,这似乎很愚蠢。如果某项数据是数值型的 - 将其表示为数字一路!不要投它两次 - 首先从C#代码中的数字到字符串,然后在存储过程中从字符串返回数字。铸造**总是花费时间,并且在例如日期的情况下,格式问题也可能出现! **不要这样做!! ** –

+0

还有哪些地方?您可以使用触发器进行插入和更新,以便在其中进行所有转换。而你的查询将保持简单和透明。 – mishau

+3

我认为在存储过程中使用CAST语句会比在C#代码中首先转换它们并传递正确类型的问题要困难得多。 – PaulStock

回答