如何创建一个表名存储在变量中的表? - SSIS

时间:2017-07-16 21:49:15

标签: sql-server ssis

SSIS执行SQL任务中,我有以下代码:

IF NOT EXISTS(
    SELECT * FROM sys.tables t INNER JOIN sys.schemas s on s.schema_id = 
        t.schema_id 
    WHERE t.name =  'tableName'  AND s.name = 'stg')
BEGIN
    CREATE TABLE [stg].[tableName] (
        Col1 nvarchar(255),
        Col2 nvarchar(1800)
    )
END

如何使tableName成为变量,以便我可以轻松更改名称?

2 个答案:

答案 0 :(得分:4)

创建一个执行sql任务,然后在SqlStatement中使用直接输入类型:

编写此代码
declare @sch nvarchar(10)   
        ,@tb nvarchar(50)
        ,@query nvarchar(1000)

Set @sch= ?
Set @tb= ?

IF NOT EXISTS(
    SELECT * FROM sys.tables t INNER JOIN sys.schemas s on s.schema_id = 
        t.schema_id 
    WHERE t.name =  @tb  AND s.name = @sch)
BEGIN
 set @query='CREATE TABLE '+@sch+'.'+@tb+' ( Col1 nvarchar(10),Col2 nvarchar(10) )'
 exec sp_executesql @query
END   

然后在参数映射选项卡中使用参数名称0和1(按照代码中的顺序)映射变量 即使您可以使用此解决方案动态创建列。

答案 1 :(得分:1)

您可以采取以下措施使其具有动态性和灵活性。 声明三个变量 -

sTableName,sSchemaName,sSQL_GenerateTable

通过名称sSQL_GenerateTable声明一个字符串变量,并将以下值作为Expression -

"IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" +@[User::sTableName] + "' AND TABLE_SCHEMA = '" + @[User::sSchemaName]+ "') BEGIN 
CREATE TABLE [" + @[User::sSchemaName]+ "].[" +@[User::sTableName] +"] (
    Col1 NVARCHAR(255)
    ,Col2 NVARCHAR(1800)
)
END "

在“执行SQL任务”中,将“SQLSourceType”设置为“Variable”并给出上述变量,将“ResultSet”设置为“None”。