sp_get_query_template不适用于 ODBC 时间戳

sp_get_query_template doesn't work with ODBC timestamp

提问人:Fausto Galati 提问时间:10/3/2023 最后编辑:Dale KFausto Galati 更新时间:10/4/2023 访问量:47

问:

我有以下疑问:

SELECT COUNT(*)
FROM (
    SELECT DISTINCT USER_NAME
    FROM LICENSE
    WHERE RESTRICTED_USE = 'T'
    AND ALLOCATED = 'T'
    UNION ALL
    SELECT USER_NAME
    FROM LICENSE
    WHERE RESTRICTED_USE = 'T'
    AND ALLOCATED = 'F'
    AND "TIME" >= {ts '2023-10-02 08:09:12'}
) AS TEMP_ALIAS

当我尝试使用sp_get_query_template创建计划指南时,计划指南不起作用,我认为原因是ODBC时间戳值。

DECLARE @stmt nvarchar(max);  
DECLARE @params nvarchar(max);  
EXEC sp_get_query_template   
    N'SELECT COUNT(*) FROM (SELECT DISTINCT USER_NAME FROM LICENSE WHERE RESTRICTED_USE = ''T'' AND ALLOCATED = ''T'' UNION ALL SELECT USER_NAME FROM LICENSE WHERE RESTRICTED_USE = ''T'' AND ALLOCATED = ''F'' AND "TIME" >= {ts ''2023-10-02 08:09:12''})AS TEMP_ALIAS',  
    @stmt OUTPUT,   
    @params OUTPUT;  

    select @stmt
    select @params

EXEC sp_create_plan_guide   
    N'UsersCountTable',   
    @stmt,   
    N'TEMPLATE',   
    NULL,   
    @params,   
    N'OPTION(PARAMETERIZATION FORCED)';  

我也尝试将时间戳参数指定为: VARCHAR()、DATEATIME、SMALLDATETIME DATETIME2 没有成功。

sql-server 日期 时间戳 odbc sql 执行计划

评论

2赞 Dale K 10/3/2023
AND "TIME" >= {ts '2023-10-02 08:09:12'}T-SQL 无效吗?
1赞 Fausto Galati 10/3/2023
这就是应用程序发送查询的方式,这不是错误。我还检查了 SQL Server Profiler。
0赞 3N1GM4 10/3/2023
另外,我认为你可以只在你的内部查询中做,完全避免使用子查询。SELECT COUNT(DISTINCT USER_NAME)
1赞 siggemannen 10/3/2023
嗯,你能避免ODBC时间戳字符串吗?运行计划指南时遇到什么错误?
0赞 Dale K 10/3/2023
你为什么删除你的答案?

答:

0赞 Fausto Galati 10/3/2023 #1

我以为我已经找到了解决方案(感谢 Dale K 的评论)

我通过删除双引号来更改查询,以为这会起作用,但过了一会儿,这些执行计划又出现了。

enter image description here