C# MySQL到SQL Server SP或实体框架

C# MySQL到SQL Server SP或实体框架,c#,mysql,sql-server,C#,Mysql,Sql Server,我很难将这个MySQL函数转换成SQl Server,甚至转换成实体框架的C代码 我将使用GEO-Lite数据库的这段代码,这样我就可以获得IP地址上的位置信息 BEGIN DECLARE loc_id INT; SELECT geoname_id INTO loc_id FROM ip_blocks WHERE ip_to >= INET_ATON(TRIM(ip)) ORDER BY ip_to LIMIT 1; RETURN

我很难将这个MySQL函数转换成SQl Server,甚至转换成实体框架的C代码

我将使用GEO-Lite数据库的这段代码,这样我就可以获得IP地址上的位置信息

BEGIN
    DECLARE loc_id INT;

    SELECT geoname_id
    INTO loc_id
    FROM ip_blocks
    WHERE ip_to >= INET_ATON(TRIM(ip))
    ORDER BY ip_to LIMIT 1;

    RETURN IFNULL(loc_id, 0);
END
我尝试创建这个SQL Server函数来替换mysql函数INET\u ATON

但我得到了一些错误,比如Trim没有被识别出内置函数名,这很奇怪,因为它是

并且在@loc_id上得到一个错误,表示它正在等待

谢谢你的帮助

多谢各位

编辑1: 我的函数现在如下所示:

CREATE FUNCTION IP2Location (@ip varchar(50)) RETURNS INTEGER
AS
BEGIN
DECLARE @loc_id INTEGER 

SELECT top 1 geoname_id INTO @loc_id FROM ip_blocks WHERE ip_to >= dbo.ipStringToInt(LTRIM(RTRIM(@ip))) ORDER BY ip_to

RETURN isnull(@loc_id, 0);
END
go
对于错误:

无法识别Trim内置函数名

仅从SQL Server 2017开始提供

如果您不使用该版本,请使用LTRIMRTRIM@ip.

对于错误:

并且在@loc_id上得到一个错误,表示它正在等待

我想你要找的不是IFNULL,而是

对于错误:

在函数中使用副作用运算符SELECT无效

而不是:

SET @loc_id = (
        SELECT geoname_id
        FROM ip_blocks
        WHERE ip_to >= dbo.ipStringToInt(TRIM(@ip))
        ORDER BY ip_to LIMIT 1
        )
或:

改用:

SET @loc_id = (
        SELECT TOP 1 geoname_id
        FROM ip_blocks
        WHERE ip_to >= dbo.ipStringToInt(LTRIM(RTRIM(@ip)))
        ORDER BY ip_to
        )

谢谢,伙计,我仍然在函数中使用了一个副作用的运算符SELECT,但其他错误正在解决此函数中的错误:IP2Location?我更新了我的问题,以显示在您修复后的最新版本,我在整个SELECT行中都遇到了错误:我正准备建议将LIMIT的使用替换为TOP 1,但你明白了。好的,看看你的编辑这是你对SELECT INTO@loc\u id的用法。你第一次做对了,只需使用SELECT TOP 1 geoname\u id FROM。。。。像最初一样使用SET
SET @loc_id = (
        SELECT geoname_id
        FROM ip_blocks
        WHERE ip_to >= dbo.ipStringToInt(TRIM(@ip))
        ORDER BY ip_to LIMIT 1
        )
SELECT TOP 1 geoname_id
INTO @loc_id
FROM ip_blocks
WHERE ip_to >= dbo.ipStringToInt(LTRIM(RTRIM(@ip)))
ORDER BY ip_to
SET @loc_id = (
        SELECT TOP 1 geoname_id
        FROM ip_blocks
        WHERE ip_to >= dbo.ipStringToInt(LTRIM(RTRIM(@ip)))
        ORDER BY ip_to
        )