gpt4 book ai didi

sql-server - 问号在 SQL 查询中的作用是什么?

转载 作者:行者123 更新时间:2023-12-05 08:29:44 28 4
gpt4 key购买 nike

我正在尝试编辑查询 SQL 表并为每个 StationID 输出 csv 文件的 ETL 包 (SSIS),但我无法理解问号在下面的查询定义中的使用方式。我明白 ?使用了一个参数,但我不明白它是如何在下面的日期函数中使用的:

SELECT TimeSeriesIdentifier, StationID, ParameterID FROM dbo.EtlView WHERE
LastModified > DATEADD(hour, ?*-1, GETDATE())
AND StationID LIKE
CASE WHEN ? = 0 THEN
StationID
ELSE
?
END

最佳答案

SSIS 中可用的参数化取决于所使用的连接管理器。

基于 OLE DB 和 ODBC 的连接管理器使用 ? 作为变量占位符,而 ADO.NET 使用命名参数 @myVariable

OLE DB 从 0 开始计数,而 ODBC 使用基于 1 的计数系统。然而,它们都是基于序数的系统,因此在您的 CASE 表达式中,两个 ? 用于同一个变量。但是,您必须在参数映射对话框中两次列出该 SSIS 变量,因为它是基于序号的 - 即 (param, name) => @HoursBack, 0; @MyVar,1;和@MyVar,2;

如果我必须处理重复的基于序数的参数,或者如果我正在对包进行故障排除,我会使用一个“愚蠢的技巧”,即让提供的查询在查询本身中使用局部变量。

DECLARE
@HoursBack int = ?
, @MyVariable int = ?;

SELECT
TimeSeriesIdentifier
, StationID
, ParameterID
FROM
dbo.EtlView
WHERE
LastModified > DATEADD(HOUR, @HoursBack * -1, GETDATE())
AND StationID LIKE
CASE
WHEN @MyVariable = 0 THEN StationID
ELSE @MyVariable
END;

现在我只需要将 SSIS 变量@MyVar 映射到我的脚本中,因为“正常”TSQL 参数化接管了。另一个好处是,我可以将其复制并粘贴到查询工具中,然后在 ?s 中使用实际值进行子查询,以直接从源代码中检查结果。如果您遇到 SSIS 中的强类型阻止您将结果输入数据查看器的情况,这将很有帮助。

关于sql-server - 问号在 SQL 查询中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68490358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com