关键字搜索包括Uniqueidentifier字段

时间:2012-03-04 02:17:18

标签: sql sql-server uniqueidentifier

我想让用户通过指定要查找的关键字来搜索数据库中的行。我想查看这个关键字的一些字段,其中一个是uniqueidentifier。问题是,如果关键字不是GUID,我会收到以下错误消息:

Conversion failed when converting from a character string to uniqueidentifier

我用来运行搜索的SQL看起来像这样:

// do not use
string sql = @"SELECT * 
               FROM [MyTable]
               WHERE [MyTable].[TableID] = '" + keyword + "'";

警告:这只是示例代码 - 不要编写像这样的sql命令,因为它会产生安全风险

如何编写SQL select语句,使keyword不是GUID时不会失败?

3 个答案:

答案 0 :(得分:2)

    string sql;
    Guid id;
    if (Guid.TryParse(keyword, out id))
    {
       sql = @"SELECT *     
           FROM [MyTable]    
           WHERE [MyTable].[TableID] = '" + keyword + "'";    
    }
    else
    {
      sql = //search by other way
    }

答案 1 :(得分:1)

这对你有用吗?

string sql = @"SELECT * 
               FROM [MyTable]
               WHERE convert(varchar,[MyTable].[TableID]) = '" + keyword + "'";

答案 2 :(得分:0)

我知道今天这对你没有帮助,但可能对未来的读者有所帮助。在SQL Server 2012中,您将能够使用TRY_CONVERT

string sql = @"SELECT * 
    FROM dbo.[MyTable]
    WHERE [TableID] = TRY_CONVERT(UNIQUEIDENTIFIER, '" + keyword + "');";

但你应该做的是将参数作为强类型GUID传递,并在有人输入非GUID的东西时在客户端程序中处理错误(使用try/catch)。