declare @showkey varchar(100)
declare @string varchar(100)
DECLARE @TableName VARCHAR(1000)
SET @TableName='temptable'
SET @showkey='SELECT '+'Keyword '+'FROM '+@TableName+' WHERE id=78'
exec(@showkey)
PRINT @showkey
--到这里都显示的结果为 类似 |xx|xx|xx|xx|
SET @string=@showkey
PRINT @string
--到这里都显示的结果为 类似 |xx|xx|xx|xx|select * from dbo.LewiSplitID(@string,'|')
PRINT @string
--到这里却变直接变成了 SELECT Keyword FROM News WHERE ID=78
为何他没有正确将|xx|xx|xx|xx|的值正确的传入 @string 呢,而是直接传进来了查询语句

解决方案 »

  1.   

    LewiSplitID 这个是干什么的?
      

  2.   


    declare @showkey varchar(100)
    declare @string varchar(100)
    DECLARE @TableName VARCHAR(1000)
    SET @TableName='temptable'
    SET @showkey='SELECT '+'Keyword '+'FROM '+@TableName+' WHERE id=78'
    exec(@showkey)
    PRINT @showkey
    --就上面的代码能显示成这样:|xx|xx|xx|xx| 
    --是这样吗?|SELECT|Keyword|FROM|WHERE| 神啊,怎么来的?
      

  3.   


    CREATE
      FUNCTION [dbo].[LewiSplitID](@String NVARCHAR(4000), @SplitChar NVARCHAR(10))
      RETURNS @table TABLE (ID VARCHAR (100)) AS  
    BEGIN  
       DECLARE  @Index  INT  
       SET  @Index  =  0  
            IF @String <> ''
            BEGIN            
                IF RIGHT(@String,1)<> @SplitChar 
                SET @String = @String + @SplitChar
                IF LEFT(@String,1)= @SplitChar 
                SET @String = STUFF(@String, 1, 1, '')
            End
           WHILE  CHARINDEX(@SplitChar,@String,@Index)  >  0    
           BEGIN  
               INSERT INTO @table(ID) 
               VALUES (SUBSTRING(@String, @Index, CHARINDEX(@SplitChar, @String,@Index) - @Index))
               SET @index = CHARINDEX(@SplitChar, @String, @Index) + 1 
           END  
    RETURN  
    END一个函数
      

  4.   

    调用一个函数把
    ¦xx ¦xx ¦xx ¦xx ¦转换为
    xx
    xx
    xx
    xx