【发布时间】:2010-07-21 22:05:59
【问题描述】:
我有一个查询,它使用游标循环选择语句的结果。
简而言之,select 语句从我拥有的映射表中选择所有记录。其中一列是“SourceTableName”。
我使用这个字段来生成一些动态 SQL。
我希望将一个参数添加到我的存储过程中,这将允许我只为我想要的“SourceTableName”创建动态 SQL - 如果我传入一个“SourceTableNameFilter”。
我被一些包含动态 SQL 的逻辑卡住了。
IF @SourceTableNameFilter(SP 参数) = @SourceTableName(来自映射表) 开始
根据 SourceTableName 生成并执行一些动态 SQL。
问题是,我希望它适用于从针对“SourceTableName”的选择返回的所有表,但如果存在 @SourceTableNameFilter 参数且不为空 - 然后只为游标中的任何行生成动态 SQL匹配我的过滤器参数。
有没有办法让我用 IF 语句完成此操作,而无需复制 IF/ELSE 中的逻辑两次?
FETCH NEXT FROM TABLECUR INTO @SourceTableName
,@SourceInColumn
,@SourceOutColumn
,@TargetTableName
,@TargetLookupColumn
,@TargetLookupResultColumn
,@MappingTableID
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
IF (@SourceTableName = @SourceTableNameFilter)
--GENERATE DYNAMIC SQL
ELSE
--GENERATE DYNAMIC SQL FOR ALL RECORDS
生成动态 SQL 字符串在 if 和 else 中是相同的,任何更改条件的方式都可以使我不重复动态 SQL 生成,并且在 @SourceTableName != @SourceTableNameFilter 时不生成动态 SQL ?
谢谢
【问题讨论】:
标签: tsql