使用sqlcmd.exe v SSMS

时间:2018-03-14 01:19:35

标签: sql-server stored-procedures sqlcmd

我有一个存储过程,它作为每日批处理运行了很多单独的过程。我一直在让操作人员执行这个过程,它是通过sqlcmd.exe完成的。在过去的3个月或更长时间内,这种情况一直没有问题。今天,它在整个过程中失败了,出现以下错误;

将数据类型varchar转换为float时出错。

将数据类型varchar转换为datetime时出错。

但是,如果我在SSMS中运行相同的proc,它将无错误地返回并且批处理已完成。

以下列方式调用sqlcmd; sqlcmd.exe -S <server> -d <database>-U <user>-P <pw> -i "sql_file.sql" -o "sql_file.sql.output.txt"

浮动/日期有一些数据转换,如果设置不正确,那么代码中就会出现这种类型的错误。但是我检查了原始数据,看起来不错。从昨天到今天,没有什么特别的变化,所以我不确定这个问题是什么。谁看过这个吗? sqlcmd处理脚本的方式与SSMS的方式有一些根本区别吗?

任何帮助都会受到赞赏,因为这种事情是浪费时间的。

一些新信息。我从客户端前端,excel或通过SSMS运行此问题。问题是当在SQL服务器上同时运行多个进程时,我们会得到转换错误 - varchar到datetime或varchar到int。今天的情况是我一直在运行一个回填历史数据的过程(需要几天时间才能完成),并且我设法始终让每日批次失败。停止后填充并且批次运行没有失败。

当我使用缩放器函数计算针对多行的某些结果时失败。缩放器函数正在执行许多转换,强制转换或解析调用。由于这是作为设置操作完成的,因此无法确定失败的特定行。

有人见过这个吗?

是否有可能在工作负载条件下,SQL服务器无法使用隐含的工作默认值,并且正在寻找可能存在冲突的显式数据库设置?

我现在应该能够不断复制这个错误,并因此尝试提高转换的安全性。我正在考虑使用PARSE而不是CONVERT,以及TRY_CAST。我知道有一些性能问题。还有其他想法可以帮助CAST / CONVERT / PARSE的可靠性吗?

0 个答案:

没有答案