我有几个采用日期/时间输入的存储过程,其中一个只采用 a 形式的日期,nvarchar
因为它使用动态 SQL。当我尝试将变量转换为存储过程时,出现错误。这对我来说没有多大意义。
我知道我可以通过在存储过程中创建第二组nvarchar
变量或强制转换来解决它,但我想了解为什么我不能直接将变量强制转换。
例子。 *TOP是一个 Select 语句,告诉我我的 NVARCHAR DATE 踢得很好。
MID是 SSMS 抛出错误的地方,BOTTOM是 SSMS 认为没问题的地方。*
我有几个采用日期/时间输入的存储过程,其中一个只采用 a 形式的日期,nvarchar
因为它使用动态 SQL。当我尝试将变量转换为存储过程时,出现错误。这对我来说没有多大意义。
我知道我可以通过在存储过程中创建第二组nvarchar
变量或强制转换来解决它,但我想了解为什么我不能直接将变量强制转换。
例子。 *TOP是一个 Select 语句,告诉我我的 NVARCHAR DATE 踢得很好。
MID是 SSMS 抛出错误的地方,BOTTOM是 SSMS 认为没问题的地方。*
存储过程参数只能接受文字、常量或变量作为参数。它不能接受任何形式的表达。
你可以说:
但是你不能说:
您不应该将日期转换为字符串,然后再转换回日期。您的动态 SQL 可以轻松获取日期参数,安全地进行参数化(您可能想阅读“SQL 注入”),而不必担心难看的字符串连接。这是一个例子:
结果: