我正在用这个返回错误的查询挣扎:当从字符串转换日期和/或时间时,转换失败。当从字符串中转换日期和/或时间时,转换失败
这是从我的谷歌搜索判断的一个常见错误,但我迄今为止没有尝试过。我已经尝试将@startdate作为datetime和varchar并单独放置,如下例所示。
我也尝试使用转换字段名和参数名称,虽然承认,我可能只是得到的语法错误。
ALTER PROCEDURE [dbo].[customFormReport]
(
@formid int,
@startdate DATETIME
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fieldname) from FormResponse WHERE FormID = @formid AND value IS NOT NULL FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT FormID, FormSubmissionID,' + @cols + ' from
(
SELECT FormID, FormSubmissionID, fieldname, value
FROM FormResponse WHERE FormID = ' + CAST(@formid AS VARCHAR(25)) + ' AND createDate > ' + @startdate + '
) x
pivot
(
max(value)
for fieldname in (' + @cols + ')
) p '
execute(@query)
编辑:查询工作,除了当我添加了位会导致错误:
' AND createDate > ' + @startdate + '
这将运行,但结果并不受参数。所有行都会返回,包括那些createDate大于输入日期的行。 我试过将日期的样式从120改为101,因为我输入日期为mm/dd/yyy 感谢您的帮助。 – tintyethan
@EthanPelton不是执行查询,而是尝试打印查询字符串并单独执行。你会得到正确的结果吗?您提交的@ startdate的值是多少?什么格式? – Taryn
大声笑!灿烂的蓝色!谢谢。 我不得不添加转义单qoutes ... CREATEDATE> '' '+转换(VARCHAR(10),@startdate 1,120)+ ''' – tintyethan