在SQL Server中创建包含每个可能输入的表

时间:2013-07-29 00:40:35

标签: sql sql-server-2005 testing

我是SQL的新手,并且很难弄清楚如何实现我想要做的事情。目前,我的测试人员手动创建一个文件,其中包含每个可能的输入以通过我们的程我想要做的是创建一个存储过程,它接受一些输入表并为它们设置每个可能的输入。目前我有两张桌子。第一个是TestFileColumnHeaders,它有两列,ColumnID和ColumnName,格式为

  

ColumnID ColumnName
    _ _ _ _ _ _ _ _

    1 Foo
    2栏
    3 Baz

此表用于正在创建的输入文件的标题。然后我有一个名为TestFileColumnInfo的可能输入表,其列ColumnID和ColumnInfo格式为

 ColumnID  ColumnInfo  
 _ _ _ _   _ _ _ _ _  
 1         Foo1  
 1         Foo2  
 2         Bar1  
 2         Bar2  
 3         Baz1

我想要的proc输出是一个像

这样的表
  

Foo Bar Baz
    _ _ _ _ _ _
    Foo1 Bar1 Baz1
    Foo1 Bar2 Baz1
    Foo2 Bar1 Baz1
    Foo2 Bar2 Baz1

我尝试过笛卡尔连接,但我不想让Foo1和Foo2出现在输出的同一行中,这就是我被卡住的地方。仅适用于无限数量的标头和输入。有没有办法在T-SQL中执行此操作?我是否需要将表格的设计更改为其他内容?对不起如果编辑关闭。我无法弄清楚如何保持标题的正确间距和下划线

1 个答案:

答案 0 :(得分:3)

你可以试试这样的东西(简单版):

 SELECT * FROM 
    (SELECT DISTINCT ColumnInfo AS foo
    FROM TestFileColumnHeaders  h
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID
    WHERE ColumnName = 'Foo') foo
CROSS JOIN 
    (SELECT DISTINCT ColumnInfo AS bar
    FROM TestFileColumnHeaders  h
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID
    WHERE ColumnName = 'Bar') bar
CROSS JOIN
    (SELECT DISTINCT ColumnInfo AS baz
    FROM TestFileColumnHeaders  h
    INNER JOIN dbo.TestFileColumnInfo i ON h.ColumnID = i.ColumnID
    WHERE ColumnName = 'Baz') baz;

<强> SQLFiddle DEMO

如果您的列数未修复,则必须执行动态sql。