对于字符串向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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Latex 换行不缩进[通俗易懂]

    Latex 换行不缩进[通俗易懂]Latex中换行但不缩进的命令:\\%强制换行但没有开始新的一段,新的一行也是没有缩进的。或者\noindent%开始新的一段且没有缩进

    2022年5月14日
    114
  • tomcat性能调优(tomcat调优参数有哪些)

    总体架构主要的组件执行过程tomcat调优1.禁用ajp协议2.启用nio模式(提升原有的吞吐量36%)3.开启链接池硬件指标,业务指标4.优化连接器

    2022年4月18日
    102
  • 如何画UML类图

    如何画UML类图简单介绍统一建模语言 UnifiedModel UML 是用来设计软件蓝图的可视化建模语言 面向对象的建模语言的国际标准 它的特点是简单 统一 图形化 能表达软件设计中的动态与静态信息 类 接口 类图类类 Class 是指具有相同属性 方法和关系的对象的抽象 它封装了数据和行为 是面向对象程序设计 OOP 的基础 具有封装性 继承性和多态性等三大特性 在 UML 中 类使用包含类名 属性和操作且带有分隔线的矩形来表示 类名类名 Name 是一个字符串 例如

    2025年12月12日
    3
  • matlab手写数字识别实验报告_如何用matlab将图像转为矩阵

    matlab手写数字识别实验报告_如何用matlab将图像转为矩阵本文主要是根据《matlab手写神经网络实现识别手写数字》博客中的代码进行试验。由于没有数据集,所以采用了MNIST数据集进行代码的运行。数据集不同所以需要对代码进行微小改动。简介数据处理:4000张作为训练样本,1000张作为测试样本;图像大小:图片的灰度值矩阵(28,28);图像名称:由标签和顺序号组成。标签_顺序号.bmp训练样本:每个数字的图像名称的顺序号是从0-399,各400…

    2025年11月17日
    3
  • sqlserver2012密钥激活(server2012r2密钥)

    MicrosoftSQLServer2008R2序列号密钥 开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM 开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8 工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6Q WEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM 数…

    2022年4月18日
    1.9K
  • scrapy框架入门实例_jeecg框架入门

    scrapy框架入门实例_jeecg框架入门一、概述Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.其最初是为了页面抓取(更确切来说,网络抓取)所设计的,后台也应用在获取API所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫.Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseS

    2022年8月30日
    2

发表回复

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

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