2017-07-16 76 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的參數映射選項卡中的變量(在代碼到來的順序)
即使您可以使用此解決方案動態創建列。

相關問題