我正在开发一个 SSIS 包。我有一个包含名称列表的数组。这些名称将是表名。
为了创建这些表,我循环一个 SQL 任务编辑器执行一个接受参数(表名)的存储过程
存储过程的代码:
ALTER PROCEDURE [dbo].[TLP.CreaTable]
(
@TableName VARCHAR(255)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL VARCHAR(4000)
SET @SQL = 'IF NOT EXISTS ( SELECT *
FROM sysobjects
WHERE id = OBJECT_ID(N''[dbo].' + @TableName + ''')
AND xtype in (N''U''))
CREATE TABLE [dbo].' + @TableName + '(
[Serial] [int] NOT NULL,
[Marc] [bit] NOT NULL,
[Sell] [bit] NOT NULL
) ON [PRIMARY]'
EXEC (@SQL)
END
当数组中的名称之一是数字时,问题就出现了。我必须说所有名称都使用 [] 进入存储过程。我在每次执行之前都创建了一个断点,当表名是一个数字时,它会在 SSIS 内部带来一个错误(为了让您更好地了解我已经从 SQL Server Management Studio 运行了存储过程,并且错误仍然存在,我使用了表名 [3001],这实际上是导致问题的真实名称)。
EXEC dbo.[TLP.CreaTable] [3001]
消息 170,级别 15,状态 1,第 5 行第 5 行:“.3001”附近的语法不正确。
如果我做类似的事情
EXEC dbo.[TLP.CreaTable] RANDOM_NAME
它工作得很好
显然有一些'。在中间。但我只是无法在代码中找到它。
谢谢
编辑:
这是一个引用问题。它在 SQL Server Management Studio 中工作。但是当我在 SSIS 中尝试它时,错误仍然存在。尝试修改 C# 代码以添加 '[ ]' 而不仅仅是 [] 并且它没有工作。
SSIS内部的错误如下。
错误:创建表 030698 处的 0xC002F210,执行 SQL 任务:执行查询“EXEC dbo.[TLP.CreaTable]?” 失败并出现以下错误:“将结果提取到类型 (DBTYPE_I4) 的变量中时发生错误”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。
有了断点,我观察了表名的变量,没问题 '[3001]'
SQL 任务编辑器中的调用是
EXEC dbo.[TLP.CreaTable] ?
但不知何故EXEC dbo.[TLP.CreaTable] '[3001]'
,SQL Server Management Studio 中的作品,但不在 SSIS 中。
任何想法?谢谢。
编辑 2
由于我对论坛很陌生,我应该在新的“问题”中问第二个问题吗?既然题目中发出的问题已经解决了。非常感谢。
编辑 3
固定的。CREATE TABLE SQL任务编辑器中的参数很长,将其更改为varchar并顺利进行。谢谢