2012-04-13 42 views
2

我正在處理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] 

Msg 170, Level 15, State 1, Line 5 Line 5: Incorrect syntax near '.3001'.

如果我這樣做

EXEC dbo.[TLP.CreaTable] RANDOM_NAME 

它的工作原理只是完美

顯然有一些 ''在中間。但我只是無法在代碼中找到它。

感謝

編輯

這是報價的問題。它在SQL Server Management Studio中工作。但是當我在SSIS中嘗試時,錯誤仍然存​​在。試圖修改C#代碼添加「[]」而不是[],它不起作用。

SSIS中的錯誤如下。

Error: 0xC002F210 at Create Table 030698, Execute SQL Task: Executing the query "EXEC dbo.[TLP.CreaTable] ?" failed with the following error: "An error occurred while extracting the result into a variable of type (DBTYPE_I4)". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

斷點我看着表名的變量,這是確定「[3001]」

的SQL任務編輯器中調用是

EXEC dbo.[TLP.CreaTable] ? 

但是不知怎麼的EXEC dbo.[TLP.CreaTable] '[3001]'作品在SQL Server Management Studio中,但不在SSIS中。

有什麼想法?謝謝。

EDIT 2

由於Im相當新的論壇,我應該問第二個問題在一個新的「問題」?因爲在這個問題上發佈的問題得到了解決。 非常感謝。

EDIT 3

固定。 CREATE TABLE SQL任務編輯器中的參數很長,將其更改爲varchar並順利進行。 感謝

回答

3

您可以嘗試包裝@TableName與QUOTENAME函數應該爲你逃跑的表名。更改該行:

CREATE TABLE [dbo].' + QuoteName(@TableName) + '(

編輯:也可能是一個想法,包裹在方括號中的表名,如果它是一個保留字:

CREATE TABLE [dbo].[' + QuoteName(@TableName) + '] (
+0

這是一個問題,但錯誤仍然存​​在於SSIS中。任何想法?在主帖中增加了一些信息。謝謝 – 2012-04-13 12:29:06

2

嘗試使用'周圍的表名

EXEC dbo.[TLP.CreaTable] '[3001]' 
+0

銥工作完美!現在將修復用於添加數組列表的C#代碼'' – 2012-04-13 12:05:53

+0

錯誤在SSIS內部持續存在。任何想法?在主帖中增加了一些信息。謝謝 – 2012-04-13 12:28:50

2

添加

左右括號
[' + @TableName + '] 

這樣的存儲過程看起來像這樣:

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 
+0

是的,括號是在前面的C#代碼中添加的。謝謝! – 2012-04-13 12:08:09

1

您不能直接用數字創建表名。嘗試將表格名稱放在引號中:I.e.

EXEC [dbo].[TLP.CreaTable] ['100'] 
+0

這是一個引號問題,非常感謝 – 2012-04-13 12:09:39

+0

錯誤在SSIS內部持續存在。任何想法?在主帖中增加了一些信息。謝謝 – 2012-04-13 12:29:13