从存储过程中的字符串转换日期时转换失败
Conversion failed when converting date from character string in a stored procedure
我遇到了 运行 带有 Date 参数的存储过程的问题。我在存储过程中有 2 个参数,returns 来自 table 的结果集。在 table 中 name
是类型 nvarchar
而 dateclient
是 date
.
参数值来自用户界面。
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。
我遇到了 运行 带有 Date 参数的存储过程的问题。我在存储过程中有 2 个参数,returns 来自 table 的结果集。在 table 中 name
是类型 nvarchar
而 dateclient
是 date
.
参数值来自用户界面。
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。