存储过程动态在日期中
我必须有一个动态的查询,但我的日期有问题。
错误消息是
msg 295,第16级,状态3,第45行
无法将字符串转换为数据类型SmallDateTime
这是我的过程
CREATE OR ALTER PROCEDURE [dbo].[baro_search1]
(@name varchar(20),
@begin_date varchar(30))
AS
BEGIN
SET NOCOUNT OFF;
DECLARE @SQL VARCHAR(MAX)
DECLARE @NomFilter VARCHAR(MAX)
DECLARE @DataFilter VARCHAR(MAX)
DECLARE @all VARCHAR(2) = '1'
SET @NomFilter = CASE WHEN @name IS NULL OR @name = '' THEN '''' + @all + ''' = ''' + @all + ''''
ELSE 'Nome like ''%' + @name + '%'''
END
SET @DataFilter = CASE WHEN @begin_date IS NULL OR @begin_date = '' THEN '''' + @all + ''' = ''' + @all + ''''
ELSE 'DataConsenso = ''%' + @begin_date + '%'''
END
SET @SQL = 'SELECT \*
FROM \[dbo\].\[AnagDati\] anag
WHERE ' + @NomFilter + ''
\+ ' AND ' + @DataFilter + ''
PRINT (@SQL)
EXEC(@SQL)
END
EXEC \[dbo\].\[baro_search1\] 'name','2015-11-22 00:00:00'
I must have a query with a dynamic where but I have a problem with the dates.
The error message is
Msg 295, Level 16, State 3, Line 45
Failed to convert a string to data type smalldatetime
Here is my procedure
CREATE OR ALTER PROCEDURE [dbo].[baro_search1]
(@name varchar(20),
@begin_date varchar(30))
AS
BEGIN
SET NOCOUNT OFF;
DECLARE @SQL VARCHAR(MAX)
DECLARE @NomFilter VARCHAR(MAX)
DECLARE @DataFilter VARCHAR(MAX)
DECLARE @all VARCHAR(2) = '1'
SET @NomFilter = CASE WHEN @name IS NULL OR @name = '' THEN '''' + @all + ''' = ''' + @all + ''''
ELSE 'Nome like ''%' + @name + '%'''
END
SET @DataFilter = CASE WHEN @begin_date IS NULL OR @begin_date = '' THEN '''' + @all + ''' = ''' + @all + ''''
ELSE 'DataConsenso = ''%' + @begin_date + '%'''
END
SET @SQL = 'SELECT \*
FROM \[dbo\].\[AnagDati\] anag
WHERE ' + @NomFilter + ''
\+ ' AND ' + @DataFilter + ''
PRINT (@SQL)
EXEC(@SQL)
END
EXEC \[dbo\].\[baro_search1\] 'name','2015-11-22 00:00:00'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会这样做:
然后打电话给它:
case
表达式表达式简单地变成1 = 1
。这样,当您需要搜索该列时,您将获得不同的计划。参见厨房sink> ://sommarskog.se/dyn-search.html“ rel =“ nofollow noreferrer”>动态搜索条件。yyyymmdd
比yyyy-mm-dd
,尤其是在任何用户可以使用非US英语语言环境或语言时。参见负责任地约会。I would do it this way:
Then to call it:
CASE
expression that simply becomes1=1
. This way you get a different plan when you need to search that column, compared to when you don't. See Kitchen Sink and Dynamic Search Conditions.yyyyMMdd
is infinitely better thanyyyy-MM-dd
, especially if any users may use a non-US English locale or language. See Dating Responsibly.将 @begin_date 的数据类型更改为 nvarchar 并且应该可以工作。
change the data type for @begin_date to nvarchar and that should work.