sql - 如何运行将数据作为 nvarchar 传递的过程?
问题描述
我无法执行该程序。将 varchar 数据类型转换为日期时间时出现错误错误。
如果我在没有过程的情况下编写,它将作为 nvarchar 插入
如何测试我的程序通过日期?
Financial.spInsertValidity 36168, '2021-10-14 14:43:07.530', '2021-10-20 14:43:07.530', 147, 1, 0, 'thiagocorrea@pedidoeletronico.com'
Create Procedure Financial.spInsertValidity(
@idEmpresa bigint
, @dtInicioVigencia datetime
, @dtFimVigencia datetime
, @idProduto int
, @qtdProduto int
, @stPeriodoTolerancia bit
, @User nvarchar(256)
)
As
Begin
Declare @Id bigint
Declare @ActiveUser nvarchar(5);
Declare @IdUser bigint;
Set @ActiveUser = Administrative.fnCheckActiveUser(@User);
Set @IdUser = Administrative.fnGetIdUser(@User)
if(@ActiveUser = 'false')
throw 51000, 'User not registered', 1;
Insert tb_vigencia_empresa(
IdEmpresa
, dtInicioVigencia
, dtFimVigencia
, stAtivo
, idProduto
, qtdProduto
, stPeriodoTolerancia
, CreatedBy
, ChangedBy
, CreationDate
, ChangeDate
)
Values(
@IdEmpresa
, @dtInicioVigencia
, @dtFimVigencia
, 1
, @idProduto
, @qtdProduto
, @stPeriodoTolerancia
, @IdUser
, @IdUser
, SWITCHOFFSET (GetDate(), administrative.ReturnTimeZone(@User))
, SWITCHOFFSET (GetDate(), administrative.ReturnTimeZone(@User))
)
Set @Id = @@Identity
Select @Id as Id
End
解决方案
看起来你已经set dateformat dmy;
生效了,例如:
set dateformat dmy;
exec spInsertValidity 36168, '2021-10-14 14:43:07.530', '2021-10-20 14:43:07.530', 147, 1, 0, 'thiagocorrea@pedidoeletronico.com';
Msg 8114 Level 16 State 5 Line 0
Error converting data type varchar to datetime.
尝试使用mdy
orymd
代替,例如:
set dateformat mdy;
exec spInsertValidity 36168, '2021-10-14 14:43:07.530', '2021-10-20 14:43:07.530', 147, 1, 0, 'thiagocorrea@pedidoeletronico.com';
-- No error
set dateformat ymd;
exec spInsertValidity 36168, '2021-10-14 14:43:07.530', '2021-10-20 14:43:07.530', 147, 1, 0, 'thiagocorrea@pedidoeletronico.com';
-- No error
避免 DATEFORMAT 问题
为避免DATEFORMAT
设置问题,请考虑将datetime
类型标量变量传递到您的存储过程中,并用于CONVERT
填充它们,例如:
set dateformat dmy;
declare @param1 datetime = convert(datetime, '2021-10-14 14:43:07.530', 121);
declare @param2 datetime = convert(datetime, '2021-10-20 14:43:07.530', 121);
exec spInsertValidity 36168, @param1, @param2, 147, 1, 0, 'thiagocorrea@pedidoeletronico.com';
-- No error
有关受支持的日期时间样式数字及其格式,请参阅CAST 和 CONVERT (Transact-SQL)文档。
推荐阅读
- css - 将滑出面板置于顶部导航下方
- python - TemplateDoesNotExist 在 /。我不知道我错在哪里
- c# - 将通用配置元素提取到共享文件中
- r - 如何根据r中的分类列更改highchart中折线图的颜色?
- python - PyCharm 绘图问题“进程以退出代码 139 完成(被信号 11:SIGSEGV 中断)”
- python - Python - Tkinter - 如何从菜单中删除所有命令
- python - 将属性添加到 Python 中的内置类?(用于检测井字游戏中的胜利)
- php - 如何从 php 中的 pre 标签解析 XML?
- python - 如何阻止在某些不同区域产生随机范围?
- swift - 使用edgesIgnoringSafeArea(.all) 使图像居中