代码之家  ›  专栏  ›  技术社区  ›  DavidStein

以编程方式创建用于IN语句的变量

  •  0
  • DavidStein  · 技术社区  · 16 年前

    创建表:

    IF OBJECT_ID('Colortable') IS NOT NULL
      DROP TABLE ColorTable
    
    CREATE TABLE Colortable (Color VARCHAR(32))
    GO
    

    SET  NOCOUNT ON
    
    INSERT Colortable
      SELECT 'red'
    
    INSERT Colortable
      SELECT 'orange'
    
    INSERT Colortable
      SELECT 'blue'
    
    INSERT Colortable
      SELECT 'green'
    GO
    

    自动创建我的变量(它将成为SSRS中的参数):

    声明@colors VARCHAR(1024)

    SELECT @colors =
             COALESCE(
               @colors + '''' + ',' + '''', '') +
             Color
    FROM Colortable
    

    当我使用“Select@colors”时,我得到以下结果:

    'red','orange','blue','green'
    

    SELECT *
    FROM colortable
    WHERE Color IN ('red', 'orange', 'blue', 'green') -- Returns 4 rows. 
    
    
    SELECT *
    FROM colortable
    WHERE Color IN (@colors) -- Returns 0 Rows
    

    有人能告诉我为什么吗?我正在尝试生成一个值字符串,这样这个脚本就可以在SSRS和SSMS(或我正在使用的任何工具)中工作。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Pranay Rana    16 年前

    我想你可以用 sp_executesql 可能对你有用

        2
  •  1
  •   D'Arcy Rittich    16 年前