我创建了一个foreach循环,该循环遍历Excel文件中的工作表。根据工作表的名称,执行许多数据流任务之一。
这是通过执行SQL任务来实现的,该任务根据表中的值验证变量,并根据某些条件返回值。
由于某种原因,当工作表名称中没有空格(例如MyTab)时,它可以正常工作;但是,当有空格(例如“我的标签页”)时,它不能正确匹配。
我尝试根据数据库表中的以下值评估工作表名称。
但是这些都不会对工作表名称“我的标签”进行评估
我用来评估变量的SQL是:
DECLARE @SheetName VARCHAR(100)
SET @SheetName = 'Tab1$'
IF EXISTS (SELECT 1
FROM [dbo].[xx]
WHERE sheetname = @SheetName)
-- The variable evaluates against the values in the sheetname column
BEGIN
SELECT 1 AS SheetExistsFlg
END
ELSE IF EXISTS (SELECT 1
FROM [dbo].[xx]
WHERE 'Tab 2$' = @SheetName)
BEGIN
SELECT 2 AS SheetExistsFlg
END
ELSE
BEGIN
SELECT 0 AS SheetExistsFlg
END
有什么想法吗?
答案 0 :(得分:1)
非常感谢您的建议。
我剥离了包装(不导入任何excel数据的循环),并采纳了Bogdan的建议,将变量值输出到表中。
有趣的是,程序包在带空格的变量上跳了起来。然后我剥去了美元符号,这没有任何区别。所以最后我删除了单引号,这解决了问题。这是我使用的转换:
(DT_WSTR,50)REPLACE(REPLACE(@[User::SheetName],"$",""),"'","")
答案 1 :(得分:0)
我认为您在订购IF ... ELSE IF ... ELSE语句时遇到问题。尝试使用以下语法:
DECLARE @SheetName VARCHAR(100)
SET @SheetName = 'Tab1$'
IF EXISTS (SELECT 1
FROM [dbo].[xx]
WHERE sheetname = @SheetName)
-- The variable evaluates against the values in the sheetname column
SELECT 1 AS SheetExistsFlg
ELSE
BEGIN
IF 'Tab 2$' = @SheetName
SELECT 2 AS SheetExistsFlg
ELSE
SELECT 0 AS SheetExistsFlg
END
侧面注释:工作表名称以$符号结尾,因此您不必添加诸如[''My Tab$'']
,{'My Tab$'}
之类的值。确保工作表名称仅包含一个空格,不能包含多个空格或Tab
。
答案 2 :(得分:0)
您是否尝试过将保存工作表名称的变量输出到某个表/文件? 这样,您就可以看到输出的值。
此外,一种不错的方法是从excel文件读取后清理工作表名称,因此,当您设置条件时,不会因美元符号或引号引起麻烦。
例如(只需复制粘贴一些C#代码,希望对您有所帮助):
if (sheetName.EndsWith("$"))
Output0Buffer.FriendlySheetName = sheetName.Remove(sheetName.Length - 1);
if ((sheetName.StartsWith("'")) && (sheetName.EndsWith("$'")))
Output0Buffer.FriendlySheetName = sheetName.Substring(1, sheetName.Length - 3);
答案 3 :(得分:0)
使用方括号,但工作表名称中不包含$
或引号。在代码上方发布的示例中为[My Tab]
,在代码上方为[Tab 2]
。
DECLARE @SheetName VARCHAR(100)
SET @SheetName = 'Tab1$'
IF EXISTS (SELECT 1
FROM [dbo].[xx]
WHERE sheetname = @SheetName)
-- The variable evaluates against the values in the sheetname column
BEGIN
SELECT 1 AS SheetExistsFlg
END
ELSE IF EXISTS (SELECT 1
FROM [dbo].[xx]
WHERE '[Tab 2]' = @SheetName)
BEGIN
SELECT 2 AS SheetExistsFlg
END
ELSE
BEGIN
SELECT 0 AS SheetExistsFlg
END