使用动态 sql 字符串插入日期时间值的最佳方法是什么,同时能够处理值为空的可能性?
当前语句从使用字符串构建的 select 语句插入到表中。datetime 值存储在一个参数中,该参数在 select 中使用。
像这样:
SET @execsql = 'INSERT INTO ( start_date )
SELECT ( ''' + CAST(start_date as VARCHAR) + ''' + ')'
EXECUTE(@execsql)
当您运行 Sybase 时,类似
Set @execsql = 'Insert Into <table> ( start_date ) Select (' +
Case When start_date is null Then
'Null'
Else
'''' + Cast(start_date as Varchar) + ''''
End + ')'
Execute(@execsql)
应该做的伎俩
这是SQL Server方式供参考
Declare @sql nvarchar(max), @params navarchar(max)
Set @sql = N'Insert Into Table (start_date) Select (@start_date)'
Set @params = N'@start_date datetime'
Exec sp_executesql @sql, @params, @start_date
显然,在这种情况下,您不需要动态 SQL,但我认为这是一个更大示例的一部分。
与动态 SQL 问题一样,建议阅读http://www.sommarskog.se/dynamic_sql.html 。