首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有动态变量的CTE

具有动态变量的CTE
EN

Stack Overflow用户
提问于 2014-01-16 01:24:04
回答 1查看 289关注 0票数 0

我有这两个CTE语句的例子,一个是硬编码的,另一个是动态的。硬编码可以工作,但动态不起作用。你能检查一下我的动态语句有什么问题吗?谢谢

--这行得通

代码语言:javascript
复制
WITH CTE AS 
( 
SELECT TOP 1 * 
FROM Citi_v823_21Nov2013.dbo.GroupRelation_Audit
WHERE Citi_v823_21Nov2013.dbo.GroupRelation_Audit.ParentEntityIDCounter =   @ParentEntityIDCounter
AND Citi_v823_21Nov2013.dbo.GroupRelation_Audit.ChildEntityIDCounter =    @ChildEntityIDCounter
AND IsNull(Citi_v823_21Nov2013.dbo.GroupRelation_Audit.AuditDateModified, '1900-01-01') < GETDATE()
ORDER BY GroupRelationCounter DESC
) 
UPDATE CTE SET DateEffectiveTo = @DateEffectiveFrom_GroupRelation

--这不起作用

代码语言:javascript
复制
DECLARE @TargetDB NVARCHAR(Max)
DECLARE @SourceDB NVARCHAR(Max)
DECLARE @DateEffectiveFrom_GroupRelation DATETIME
DECLARE @UpdateRecords_GroupRelation NVARCHAR(Max) 
SET @TargetDB = 'Citi_v823_21Nov2013'
SET @SourceDB = 'UATCitiv82320131018'
SET @DateEffectiveFrom_GroupRelation = '2013-09-29'
SET @UpdateRecords_GroupRelation = '
;WITH CTE AS 
( 
SELECT TOP 1 * 
FROM ' + @TargetDB +  '.dbo.GroupRelation_Audit
WHERE ' + @TargetDB +  '.dbo.GroupRelation_Audit.ParentEntityIDCounter =  ' +   CONVERT(NVARCHAR(Max), @ParentEntityIDCounter) +'
AND ' + @TargetDB +  '.dbo.GroupRelation_Audit.ChildEntityIDCounter = ' +   CONVERT(NVARCHAR(Max), @ChildEntityIDCounter) +'
AND  IsNull(' + @TargetDB +  '.dbo.GroupRelation_Audit.AuditDateModified, ''1900-01-01'') < GETDATE() ''
ORDER BY ' + @TargetDB +  '.dbo.GroupRelation_Audit.GroupRelationCounter DESC
)'
UPDATE CTE SET DateEffectiveTo =  @DateEffectiveFrom_GroupRelation 

EXEC sp_executesql @UpdateRecords_GroupRelation 
EN

回答 1

Stack Overflow用户

发布于 2014-01-16 01:29:30

将UPDATE语句移动到SQL语句中。

CTE是本地作用域,因此语句不会知道CTE是什么,而只是抛出一个无效对象错误。

示例代码:

代码语言:javascript
复制
declare @sql nvarchar(max)

select *
into ##t
from
(select 3 as b) tmp

select * from ##t;

set @sql = ';WITH a as (select 1 as b) update ##t set b = (select top 1 * from a) '

EXEC sp_executesql @sql

select * from ##t

drop table ##t
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21144160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档