将主表动态划分为子表

时间:2014-01-02 16:29:35

标签: sql ssis

我想要一个查询或SSIS解决方案来解决我的问题。 我有一张主桌。 我想要一个查询,创建一些名称为我的列值之一的表,并将相关记录复制到该表。 示例:

 name, id, address,tell
  aaa , 1 , asfsaf , 234
  bbb , 23 , afa    , 654
  aaa , 34 , kkk   , 73
  ccc , 3434 ,hfdg , 643
  ccc , 325 , uytr , 876

因此创建3个名为“aaa”,“bbb”和“ccc”的表。 有关更多信息,我附上了一张照片:

http://www.uploadax.com/images/39411125324526961608.jpg

谢谢

1 个答案:

答案 0 :(得分:0)

你需要能够动态创建表,使用EXEC('insert DDL HERE'),你最好调用一个存储过程来处理这个,而不是试图在SSIS中做。在这里查看EXEC命令。

Dynamic SQL - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL)

第1步: 获取不同的“新表”列表

SELECT DISTINCT name
INTO #TMP_newTables

步骤2:

为通过游标(http://blog.sqlauthority.com/2007/01/01/sql-server-simple-example-of-cursor/

捕获的每一行创建一个表

第3步: 在游标内部发出EXEC('CREATE TABLE .......')语法。

第4步: 将当前表的数据存储到TEMP表中。

SELECT col1,col2,col3
FROM MainTable
INTO #TMP_DATA
WHERE name = @CurrentName

SET @InsertSQL = 'INSERT ' + @CurrentName +'(col,col2,col3) SELECT col1,col2,col3 FROM #TMP_DATA'

EXEC(@InsertSQL)
DROP TABLE #TMP_DATA
DROP TABLE #TMP_newTables