下面写得简单例子 老是说括号附近有语法错误 我想实现动态拼接where 后面的条件语句 请指正~~谢谢~~~
CREATE TABLE tb(col2 varchar(10),col3 varchar(10))
INSERT tb SELECT 'a','a'
INSERT tb SELECT 'b','b'
INSERT tb SELECT 'c','c'
INSERT tb SELECT 'd','d'GO
CREATE FUNCTION dbo.f_comb(@a varchar,@b varchar,@c varchar)
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re = @b + '=' + @aRETURN(@re)
END
GO
SELECT * FROM tb where dbo.f_comb('a','col2','col3')
--SELECT * FROM tb
drop table tb
drop function f_comb
CREATE TABLE tb(col2 varchar(10),col3 varchar(10))
INSERT tb SELECT 'a','a'
INSERT tb SELECT 'b','b'
INSERT tb SELECT 'c','c'
INSERT tb SELECT 'd','d'GO
CREATE FUNCTION dbo.f_comb(@a varchar,@b varchar,@c varchar)
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re = @b + '=' + @aRETURN(@re)
END
GO
SELECT * FROM tb where dbo.f_comb('a','col2','col3')
--SELECT * FROM tb
drop table tb
drop function f_comb
ALTER FUNCTION dbo.f_comb(@a varchar(10),@b varchar(10),@c varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @RE=''
SET @re = @b + '=''' + @a+''''
RETURN(@re)
END
GO
DECLARE @S VARCHAR(20)
SELECT @S=dbo.f_comb('a','col2','col3')
EXEC('SELECT * FROM tb where '+@S+'')
--SELECT * FROM tb
drop table tb
drop function f_comb
switch(@re)case '1' then .....
.......
default.....
可以循环,可以用case
和 SET @re = @b + '=' + @a 不一样?
和 SET @re = @b + '=' + @a 不一样?
----------------------------------------------
想要的where子句是
col2='a'
但在exec里,相当于'col2='a''===>'(col2) + (= ) + ('a')'
即:'col2' + '=' + ''a''
即:@b + '=' + '@a'
但这样写exec无法识别@a,所以要稍微变一下,把
'col2='a''===>'(col2 + (=') + (a'))'===>'col2' + '=''+ 'a''===>@b + '=''' + @a + ''
最后有一个空引,所以是:===>@b + '=''' + @a + ''''
anycall2004(没事,瞎转悠!) ( ) 信誉:100 2006-05-30 13:11:00 得分: 0
再问下 SET @re = @b + '=''' + @a+'''' 里面 为什么 跟 ''
和 SET @re = @b + '=' + @a 不一样?
----------------------------------------------------------------------- 因為@a是字符串,所以前後要加上'',組合字符串的時候一個'用兩個'代替,所以就會這樣。如果@a是數字型,可以直接這麼寫。
SET @re = @b + '=' + Rtrim(@a)
SET @re = @b + '=' + @a 在程序里面其实就是 col1 = col2 '' 表示 '