2017-07-16 75 views
-1

SSIS执行SQL任务,我有这样的代码:如何创建一个表格名称存储在变量中的表格? - SSIS

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一个变量,这样我可以很容易地改名字?

+0

听起来像你动态地想创建表? – Namphibian

+0

是的。我想动态创建表格。 –

+0

看到这个答案为什么这是一个坏主意https://stackoverflow.com/questions/10877407/t-sql-how-to-create-tables-dynamically-in-stored-procedures/10877522#10877522 – Namphibian

回答

0

以下是您可以做的事情,使其变得灵活而灵活。 声明三个变量 -

sTableName,sSchemaName,sSQL_GenerateTable

声明由名称sSQL_GenerateTable一个字符串变量,并提供以下值表达式 -

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

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

0

创建一个执行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 '[email protected]+'.'[email protected]+' (Col1 nvarchar(10),Col2 nvarchar(10))' 
exec sp_executesql @query 
END 

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

相关问题