帮忙看看存储过程哪错了

zhaozhao66 2010-03-10 08:17:42
alter proc AllSelect
@cz varchar(50),
@czzl varchar(50),
@th varchar(50),
@xmmc varchar(50),
@zl varchar(50),
@mxsjwcrq smalldatetime,
@mxzl varchar(50),
@mxzzdw varchar(50),
@gysjlb varchar(50),
@zjsjwcrq smalldatetime,
@tozjsjwcrq smalldatetime,
@tomxsjwcrq smalldatetime
as


declare @strWhere varchar(500)
set @strWhere ='select N.*,I.* from NewProductTrialManufacturing N inner join ImageCode I on N.th=I.th where 1=1'
if (@cz != '')
begin
print '1'
set @strWhere = @strWhere+' and N.cz ='+''''+@cz+''''
end
if @czzl <>'无'
set @strWhere= @strWhere+' and N.czzl ='+''''+@czzl+''''
if @th <>''
set @strWhere = @strWhere+' and N.th ='+''''+@th+''''
if @xmmc <>''
set @strWhere = @strWhere+' andI. xmmc='+''''+@xmmc+''''
if @zl <>'无'
set @strWhere = @strWhere+' and I.zl='+''''+@zl+''''
if @mxsjwcrq <>''
set @strWhere = @strWhere+' and N.mxsjwcrq between '+''''+@mxsjwcrq+''''+ 'and '+''''+@tomxsjwcrq+''''
if @mxzl <>'无'
set @strWhere = @strWhere+' and N.mxzl='+''''+@mxzl+''''
if @mxzzdw <>'无'
set @strWhere = @strWhere+' and N.mxzzdw='+''''+@mxzzdw+ ''''
if @gysjlb <>'无'
set @strWhere = @strWhere+' and N.gysjlb='+''''+@gysjlb+''''
if @tozjsjwcrq <>''
begin
set @strWhere = @strWhere+' and I.zjsjwcrq between '+''''+@zjsjwcrq+''''+ 'and '+''''+@tozjsjwcrq+''''
end

print @strWhere
exec(@strWhere)
GO

为什么提示
从字符串转换为 smalldatetime 数据类型时发生语法错误。
...全文
46 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ai_li7758521 2010-03-10
  • 打赏
  • 举报
回复
引用 1 楼 sql77 的回复:
@tomxsjwcrq smalldatetime
LTRIM(@tomxsjwcrq )
把这些参数都转换成字符型的
正解,字符串不能和数字相加。
SQL77 2010-03-10
  • 打赏
  • 举报
回复
CREATE TABLE TBTEST(ID INT,TIME DATETIME)
INSERT TBTEST SELECT 1,GETDATE()


DECLARE @TIME DATETIME,@SQL VARCHAR(500)
SET @TIME=GETDATE()
SET @SQL='SELECT * FROM TBTEST WHERE TIME<'''+LTRIM(@TIME)+''''

EXEC( @SQL)




ID TIME
----------- ------------------------------------------------------
1 2010-03-10 20:22:58.920
--小F-- 2010-03-10
  • 打赏
  • 举报
回复
@mxsjwcrq 参数都需要转化为字符型的
SQL77 2010-03-10
  • 打赏
  • 举报
回复
DECLARE @TIME DATETIME,@S VARCHAR(10)
SET @S='A'

SET @TIME=GETDATE()

SELECT @S+LTRIM(@TIME)


--------------------------------------------------
A03 10 2010 8:21PM

(所影响的行数为 1 行)
SQL77 2010-03-10
  • 打赏
  • 举报
回复
@tomxsjwcrq smalldatetime

LTRIM(@tomxsjwcrq )


把这些参数都转换成字符型的,

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧