下面写得简单例子 老是说括号附近有语法错误 我想实现动态拼接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

解决方案 »

  1.   

    --改下:
    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
      

  2.   

    谢谢 。。我看看自定义函数里可以用循环么? 或者用case ? 能举个例子么?
    switch(@re)case '1' then .....
    .......
    default.....
      

  3.   

    -自定义函数里可以用循环么? 或者用case ? 能举个例子么?
     可以循环,可以用case
      

  4.   

    再问下  SET @re = @b + '=''' + @a+'''' 里面 为什么 跟 ''  
    和 SET @re = @b + '=' + @a   不一样?
      

  5.   

    EXEC('SELECT * FROM tb  where '+@S+'')@s后面的那个空引必须得要?什么意思?
      

  6.   

    再问下  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 + ''''
      

  7.   


     anycall2004(没事,瞎转悠!) ( ) 信誉:100  2006-05-30 13:11:00  得分: 0  
     
     
       再问下  SET @re = @b + '=''' + @a+'''' 里面 为什么 跟 ''  
    和 SET @re = @b + '=' + @a   不一样?
    ----------------------------------------------------------------------- 因為@a是字符串,所以前後要加上'',組合字符串的時候一個'用兩個'代替,所以就會這樣。如果@a是數字型,可以直接這麼寫。
    SET @re = @b + '=' + Rtrim(@a)
      

  8.   

    SET @re = @b + '=''' + @a+''''  在程序里面其实就是 col1 = '..'
    SET @re = @b + '=' + @a          在程序里面其实就是 col1 = col2 '' 表示 '