在 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
成为变量,以便我可以轻松更改名称?
答案 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”。