【发布时间】:2018-09-30 18:03:58
【问题描述】:
我收到如下错误:
消息 241,级别 16,状态 1,过程 spQueryMgt,第 106 行 [批处理 Start Line 13] 转换日期和/或时间时转换失败 来自字符串。
ALTER PROCEDURE [dbo].[spQueryMgt]
@Mode varchar(50)='',
@Query_Form varchar(20)='',
@Patient_ID bigint=0,
@Verified_By bigint = 0,
@Verified_Date datetime=''
AS
BEGIN
IF(@mode='Post_Query')
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'Update '+ CONVERT(varchar(12), @Query_Form) +' Set
Verified_By='+CONVERT(VARCHAR(12), @Verified_By)+',
Verified_Date='''+CONVERT(datetime, @Verified_Date,20)+'''
where Patient_ID = '+CONVERT(varchar(12), @Patient_ID)
EXEC sp_executeSQL @sql;
END
END
【问题讨论】:
-
你能在
EXEC sp_exe...上方的过程中添加PRINT @sql吗? -
尝试从
@Verified_Date中删除convert。注射也要小心 -
Verified_Date='+CONVERT(datetime, @Verified_Date,20)+'此更改可能有效。 -
作为旁注,最好用 null 而不是 '' 来初始化 datetime 参数
-
您可能想查看example 如何以更安全的方式执行动态 sql。因为SQL injection 不好。
标签: sql sql-server sql-server-2008