我正在尝试在C#.Net 4中编写一个Windows窗体应用程序,它连接到SQL Server 2008数据库,我想从一个表中选择最大数字,其中数字存储为字符串!
string SQL = "select MAX(CONVERT(int, myField)) from myTable where myCode = '" + theCust + "'";
我也在select语句中尝试了Max(CAST(myField as Int))但是两个都没有返回任何东西,即使数据库有forcust两行10001和10002.Yer i Get是“枚举没有产生结果“
我做错了什么?
我正在使用内置的System.Data.SqlClient,如果我只是做一个
string SQL = "select myField from myTable where myCode = '" + theCust + "'";
它将两个数字作为字符串返回。我知道我可以在代码中对它们进行排序,但如果数据库变大则不是一个好方法!
我刚刚尝试使用db中的int字段并仍然得到相同的错误! Max是错误的用法吗?
答案 0 :(得分:5)
你可以这样试试:
SELECT TOP 1 CAST(MyColumn AS int) AS TheMax
FROM MyTable
ORDER BY TheMax DESC
所以(使用草率方法,总是使用paramaterize!)
String sql = "SELECT TOP 1 CAST(MyColumn AS int) AS TheMax FROM MyTable WHERE MyParam = '" + param + "' ORDER BY TheMax Desc";
//Fill DataAdapter/DataReader etc.
答案 1 :(得分:1)
在您的数据库中使用此功能:
CREATE FUNCTION dbo.IsAllDigits (@MyString VARCHAR(8000))
RETURNS TABLE AS
RETURN (
SELECT CASE
WHEN @MyString NOT LIKE '%[^0-9]%'
THEN 1
ELSE 0
END AS IsAllDigits
)
因为它比T-SQL中的内置ISNUMERIC()更好。
然后,您可以使用此查询来获取无错误地转换为整数类型的字符串集,并像使用TOP 1一样过滤它们。
SELECT TOP 1 MyColumn AS TheMax
FROM MyTable
WHERE IsAllDigits(MyColumn)=1
ORDER BY MyColumn DESC