在一个T-SQL的存储过程里
接收一个参数:@FLG根据@FLG的值来动态拼写SQL文
譬如:
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置)要求是:
如果@FLG = '1' ,在AND条件括号里添加这句话:AAFLG LIKE '1_'
如果@FLG != '1' ,在AND条件括号里添加这句话:AAFLG LIKE '2_' OR AAFLG LIKE '3_'这个要如何写呢?
请高人指点,另外,请确保可以正确表达语义(1:业务逻辑正确;2:语法正确),谢谢!
接收一个参数:@FLG根据@FLG的值来动态拼写SQL文
譬如:
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置)要求是:
如果@FLG = '1' ,在AND条件括号里添加这句话:AAFLG LIKE '1_'
如果@FLG != '1' ,在AND条件括号里添加这句话:AAFLG LIKE '2_' OR AAFLG LIKE '3_'这个要如何写呢?
请高人指点,另外,请确保可以正确表达语义(1:业务逻辑正确;2:语法正确),谢谢!
if @FLG = '1'
set @sql = 'select aaaaa from tb where ...'
else
set @sql = 'select aaaaa from tb where ...'exec(@sql)
Declare @T_SQL varchar(8000)
set @T_SQL='SELECT AAAAA FROM TABLE WHERE DELFLG = ''0'''
if @FLG='1'
set @T_SQL=@T_SQL + 'and AAFLG LIKE '1_' '
else
set @T_SQL=@T_SQL + 'AAFLG LIKE '2_' OR AAFLG LIKE '3_' ' exec @T_SQL
我的sql文已经连了8张table了
差不多有100行啦
如果这样的话我岂不是惨啦
能不能只根据参数改动SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置) 的“(要添加位置)”部分?
我的这一段SQL文是用来定义CURSOR的。
DECLARE CUR_AAAAA CURSOR LOCAL STATIC FOR
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置) 如果用上边两位的写法,这样又该如何组织呢?
可行吗?
declare @sql varchar(512)
set @sql = '
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = ''0''
and
'declare @FLG int
declare @addicondition varchar(128)IF @FLG=1
set @addicondition = 'AAFLG like ''1_'''
ELSE
set @addicondition = '(AAFLG like ''2_'' or AAFLG like ''3_'')'set @SQL = @sql + @addiconditionexec @SQL
可是问题还没有解决在一个T-SQL的存储过程里
接收一个参数:@FLG 根据@FLG的值来动态拼写SQL文
譬如:
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置) 要求是:
如果@FLG = '1' ,在AND条件括号里添加这句话:AAFLG LIKE '1_'
如果@FLG != '1' ,在AND条件括号里添加这句话:AAFLG LIKE '2_' OR AAFLG LIKE '3_' -------------------------------
我的这一段SQL文是用来定义CURSOR的。|
-------------------------------
DECLARE CUR_AAAAA CURSOR LOCAL STATIC FOR
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置)怎么写啊?
@flg int
as
begin
declare @sql varchar(512)
set @sql = '
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = ''0''
and
'
IF @FLG=1
set @sql = 'AAFLG like ''1_'''
ELSE
set @sql = '(AAFLG like ''2_'' or AAFLG like ''3_'')'exec (@SQL)
@flg int
as
begin
declare @sql varchar(512)
set @sql = '
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = ''0''
and
'
IF @FLG=1
set @sql = @sql +'AAFLG like ''1_'''
ELSE
set @sql = @sql +'(AAFLG like ''2_'' or AAFLG like ''3_'')'exec (@SQL)
可是,大家难道都没有看到我的这个动态拼接的SQL文的前提吗?--------------------------------------------------------
这里重申一下:这一段SQL文是用来定义CURSOR的
--------------------------------------------------------上边各位的方法也许都出色完成了拼接,可是根本不能达到需求啊!
我需要的是不但能完成拼接,还能完成CURSOR的DECLARE才行啊!接收一个参数:@FLG CHAR(1)
如果@FLG = '1' ,在AND条件括号里添加这句话:AAFLG LIKE '1_'
如果@FLG != '1' ,在AND条件括号里添加这句话:AAFLG LIKE '2_' OR AAFLG LIKE '3_'
用来动态定义一个CURSOR ,如下:DECLARE CUR_AAAAA CURSOR LOCAL STATIC FOR
//Add your code here
SELECT
AAAAA
FROM
TABLE
WHERE
DELFLG = '0'
AND (要添加位置)
declare @str varchar(1000)
set @str='declare @t int set @t=10 print @t'
exec (@str)
难道大家让我开始怀疑自己的表达能力啦!
为什么还在写这样的东西啊?
我哭啦
真的!各位哥哥,我求求你们,发帖前看清楚我要做什么好吗?
大家为什么都给我写如下的逻辑:
IF @FLG=1
set @sql = @sql +'AAFLG like ''1_'''
ELSE
set @sql = @sql +'(AAFLG like ''2_'' or AAFLG like ''3_'')' SQL中加入这个逻辑,我想我会写,要不也不用做软件开发啦!
可我要的是如何定义一个动态CURSOR,CURSOR的做成条件里加入这样的动态逻辑我请问,大家有谁给我的方案里有动态CURSOR的定义啦?
哪怕是CURSOR关键字?有吗?
所以,我说,帮别人也要负责任!!!
这算什么解决方案,简直和问题没一点关系
连最起码的CURSOR关键字我都没看到。算啦,还是感谢大家的热心,即使你根本不知道我是要什么。问题已经解决啦,详细见http://topic.csdn.net/u/20071217/14/b7093d2a-4ee0-4640-837f-9bf4e9261e58.html
@FLG nvarchar(1)
as
begin
declare @AAAA nvarchar(50)
declare @cursorname cursorset @cursorname = cursor local for select AAAAA from BBBB where DELFLG ='' and (AAFLG LIKE (CASE WHEN @FLG='1' THEN '1_' ELSE '2_' END) OR AAFLG LIKE (CASE WHEN @FLG!='1' THEN '3_' END) )
open @cursorname
fetch next from @cursorname into @AAAA
while @@fetch_status = 0
begin
--数据处理在这里
SELECT @AAAA fetch next from @cursorname into @AAAA
end
end
可是绝对是不正确的
如果@FLG = ‘1’
你写的:
set @cursorname = cursor local for select AAAAA from BBBB where DELFLG ='' and (AAFLG LIKE (CASE WHEN @FLG='1' THEN '1_' ELSE '2_' END) OR AAFLG LIKE (CASE WHEN @FLG!='1' THEN '3_' END) ) 会变成什么样子?就是变成这个样子:
set @cursorname = cursor local for select AAAAA from BBBB where DELFLG ='' and (AAFLG LIKE ‘1_’ OR AAFLG LIKE )很明显这会有语法错误的