Zan*_*ane 7 sql-server ssis sql-server-2008-r2
我有一个 SSIS 包,它正在执行一个简单的SELECT
语句,然后加载到一个表中。我已将 sql 语句匿名化,当您查看表名时,该语句应该非常明显。为了这个演示的目的,我还简化了这个包,只做一个行计数。
我遇到的这个问题是查询在 SQL 服务器中生成行,但在 SSIS 中不生成行。查询如下。
DECLARE @CurrentBlahDate DATETIME
SET @CurrentBlahDate = ( SELECT MAX(BlahDate)
FROM dbo.ThisCoolTable SL
WITH ( NOLOCK )
INNER JOIN dbo.ThatCoolTable SLF
WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
AND SLF.TypeCode IN (
'ValueA',
'ValueB' ))
SELECT
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(@CurrentBlahDate AS DATE)
Run Code Online (Sandbox Code Playgroud)
请忽略 * 因为这只是为了这个演示的目的。实际查询即使没有 *. 在 SQL Server 中执行时,这会按预期从日历表中返回 1 行。但是,当在 SSIS 中针对相同的环境执行时,我没有返回任何行。
如果我将查询转换为存储过程并在 SSIS 中执行 sproc,我得到的行数为 1。
如果我将查询更改为此。
SELECT
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(( SELECT MAX(BlahDate)
FROM dbo.ThisCoolTable SL
WITH ( NOLOCK )
INNER JOIN dbo.ThatCoolTable SLF
WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
AND SLF.TypeCode IN (
'ValueA',
'ValueB' )) AS DATE)
Run Code Online (Sandbox Code Playgroud)
然后我再次收到 1 行。
我看到这种行为有什么原因吗?
更新:在我为此受到大量抨击之前,我对 NOLOCK 的废话别无选择。
Lam*_*mak 10
好吧,尽管我实际上并不知道这种行为背后的原因,但我记得前段时间读到过这个,以及如何解决它。要完成这项工作,您只需要SET NOCOUNT ON
在 sql 命令的第一行添加:
SET NOCOUNT ON
DECLARE @CurrentBlahDate DATETIME
SET @CurrentBlahDate = ( SELECT MAX(BlahDate)
FROM dbo.ThisCoolTable SL
WITH ( NOLOCK )
INNER JOIN dbo.ThatCoolTable SLF
WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
AND SLF.TypeCode IN (
'ValueA',
'ValueB' ))
SELECT
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(@CurrentBlahDate AS DATE)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1289 次 |
最近记录: |