从存储过程中的字符串转换日期时转换失败

Conversion failed when converting date from character string in a stored procedure

我遇到了 运行 带有 Date 参数的存储过程的问题。我在存储过程中有 2 个参数,returns 来自 table 的结果集。在 table 中 name 是类型 nvarchardateclientdate.

参数值来自用户界面。

ALTER PROCEDURE [dbo].[NAME_SEARCH] 
    @name nvarchar(255),
    @dateclient datetime
AS 
BEGIN 
    DECLARE @parsed_string nvarchar(max)

    EXEC parsing_coi_input @name, @parsed_string OUTPUT

    PRINT @parsed_string

    SET @name = @parsed_string

    DECLARE 
        @BaseQuery nvarchar(max) = 'SELECT Id, name, date_client
                                    FROM Client
                                    INNER JOIN CONTAINSTABLE (Client, ame,'''+ @name + ''') as name_key ON ID = name_key.[KEY]'
   DECLARE 
        @OrderByQuery nvarchar(max) = ' ORDER BY name_key.RANK'
   DECLARE
        @OrderDesc nvarchar(max) =' DESC'

   BEGIN 
       SET NOCOUNT ON;
       SET @BaseQuery = @BaseQuery + ' 
   INNER JOIN CONTAINSTABLE(Client, date_client,'''+ @dateclient  +''') AS 
   date_clientkey ON ID = date_clientkey.[KEY] WHERE date_client_matter_open >= '+ @dateclientmatter  
    +''
   SET @OrderByQuery = @OrderByQuery + ',date_client_key.RANK'

   END 

    DECLARE @fullQuery nvarchar(max)= @BaseQuery + @OrderByQuery + @OrderDesc
    EXECUTE sp_executesql @fullQuery
    END

我正在执行:

EXEC [dbo].[NAME_SEARCH] 'MGeolo','2009-04-05'

但是我得到这个错误:

Conversion failed when converting date and/or time from character string.

有什么处理方法的建议吗?

当生成 SQL 脚本以及从 datetime 到 varchar 的转换时,您缺少日期周围的 ' 字符。

你应该这样做:

BEGIN 
       SET NOCOUNT ON;
       SET @BaseQuery = @BaseQuery + ' 
   INNER JOIN CONTAINSTABLE(Client, date_client,'''+ cast(@dateclient as varchar(200))  +''') AS 
   date_clientkey ON ID = date_clientkey.[KEY] WHERE date_client_matter_open >= '''+ cast(@dateclientmatter as varchar(200)) +''''
   SET @OrderByQuery = @OrderByQuery + ',date_client_key.RANK'

这可能是一个拼写错误,但未声明@dateclientmatter,因为在header中你只有@dateclient。