对于字符串向smalldatetime转换失败问题的解决

对于字符串向smalldatetime转换失败问题的解决此类问题一般出现于动态存储过程,我以up_selectTradeInfo为例简单说明该问题的解决方法 –建表–银行卡表GOUSEBankCardManageDBGOIFEXISTS(SELECT*FROMsys.objectsWHERENAME=BankCard) DROPTABLEBankCardCREATETABLEBankCard ( ID intiden

大家好,又见面了,我是你们的朋友全栈君。此类问题一般出现于动态存储过程,我以up_selectTradeInfo为例简单说明该问题的解决方法 



–建表
–银行卡表
GO
USE BankCardManageDB
GO
IF EXISTS (SELECT * FROM sys.objects WHERE NAME=’BankCard’)
DROP TABLE BankCard
CREATE TABLE BankCard  
(
ID
int identity(1,1),
CardID char(10) PRIMARY KEY,
BankName varchar(20) NOT NULL,
UserName varchar(20) NOT NULL,
Deposit money NOT NULL DEFAULT(0),
Payout money NOT NULL DEFAULT(0)
)
GO

–交易记录表
USE BankCardManageDB
IF EXISTS(SELECT * FROM sys.objects WHERE NAME=’Trade’)
DROP TABLE Trade
CREATE TABLE Trade  
(
TradeID BIGINT PRIMARY KEY IDENTITY(1,1),
CardID CHAR(10) FOREIGN KEY REFERENCES BankCard(CardID) NOT NULL,
TradeDate DATETIME NOT NULL,
TradeMoney MONEY CHECK(TradeMoney>0),
TradeType char(8) CHECK(TradeType=’存钱’ or TradeType=’取钱’)
)
GO

–插入测试数据
INSERT INTO BankCard VALUES(‘123456766′,’工商银行’,’田国兴’,2000,200)
INSERT INTO Trade VALUES(‘123456766′,’20080921′,30000,’存钱’)

–创建存储过程 up_selectTradeInfo 查询时间段内卡的交易信息

USE BankCardManageDB

GO
IF EXISTS(SELECT * FROM sys.objects WHERE name=’up_selectTradeInfo’)
DROP PROCEDURE up_selectTradeInfo
GO
CREATE PROCEDURE up_selectTradeInfo
@cardID varchar(10),
@startDate smalldatetime,–时间上限
@endDate smalldatetime
–时间下限
AS 
BEGIN
DECLARE @sqlStr varchar(300)
SET @sqlStr=’SELECT * FROM Trade WHERE CardID=’+str(@cardID)
+’ AND TradeDate BETWEEN ‘+@startDate+’ AND ‘+@endDate
EXEC(@sqlStr)
END

exec up_selectTradeInfo ‘123456766’,’20080920′,’20080921′


在执行存储过程时,发生以下错误
消息 295,级别 16,状态 3,过程 up_selectTradeInfo,第 11 行

将字符串转换为 smalldatetime 数据类型时失败

具体解决办法如下:
把存储过程里面的SET @sqlStr一句改为(嵌套转换)
SET @sqlStr=’SELECT * FROM Trade WHERE CardID=’+str(@cardID)
+’ AND TradeDate BETWEEN
CONVERT(SMALLDATETIME,’+””+CONVERT(VARCHAR,@startDate,112)+””+’,120)’

+’ AND CONVERT(SMALLDATETIME,’+””+CONVERT(VARCHAR,@endDate,112)+””+’,120)’
(注意:在数据类型为datetime时最好不要使用那个BETWEEN)
再执行
exec up_selectTradeInfo ‘123456766’,’20080920′,’20080921′
返回
TradeID              CardID     TradeDate               TradeMoney            TradeType
——————– ———- ———————– ——————— ———
18                   123456766  2008-09-21 00:00:00     30000.00              存钱    

(1 行受影响)
问题解决!!



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144781.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python2和Python3的区别,以及为什么选Python3的原因

    Python2和Python3的区别,以及为什么选Python3的原因我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~学…

    2022年6月9日
    30
  • ionic react-native和native开发移动app到底那个好

    ionic react-native和native开发移动app到底那个好

    2021年9月13日
    70
  • redis 乐观锁_jpa乐观锁

    redis 乐观锁_jpa乐观锁文章目录GeospatialHyperloglogBitmapsRedis事务悲观锁和乐观锁JedisSpringboot继承RedisGeospatial存储地理位置的数据结构应用场景朋友的定位,附近的人,打车距离计算Geospatial底层使用的是Zset127.0.0.1:6379> geoadd city 116.23 40.22 beijing 添加一个数据127.0.0.1:6379> geoadd city 121.47 31.23 shanghai 118.77

    2022年8月8日
    6
  • java 常量接口

    java 常量接口接口当中也可以定义 成员变量 但是必须使用 publicstatic 三个关键字进行修饰 从效果上看 这其实就是接口的 常用 格式 publicstatic 数据类型常量名称 数据值 接口当中的常量 可以省略 publicstatic 接口中的常量 必须进行赋值 接口中常量的名称 使用大写的字母 publicinterf public

    2025年10月8日
    3
  • 加工机械双探头高频读写器CK-FR102AN用户开发手册「建议收藏」

    加工机械双探头高频读写器CK-FR102AN用户开发手册「建议收藏」加工机械双探头高频读写器CK-FR102AN用户开发手册CK-FR102AN系列双探头高频读写器是一款基于射频识别技术的高频RFID标签读卡器,读卡器工作频率为13.56MHZ,支持对I-CODE2、I-CODESLI等符合ISO15693国际标准协议格式标签的读取。FR102一款轻量型RFID读头,采用菲尼克斯定制外壳,体积小、自带工控箱安装滑轨卡扣,易安装。同时支持两个探头工作,通过电缆拉长的探头在加工机械应用场景上可以灵活安装,支持姆龙plc的ethernetip通讯。读写器选型型号

    2022年6月22日
    29
  • sql存储过程语法详解

    sql存储过程语法详解一、定义变量使用关键字declare申明变量:declare@变量名变量类型/*简单赋值*/declare@aintset@a=5print@a/*select赋值*/declare@bnvarchar(10)select@b=stu_namefromdbo.studentwherestu_id=6print@b/…

    2022年7月17日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号