2012-12-10 47 views
1

我有一個問題,我的存儲過程有一個錯誤在我的存儲過程

ALTER PROCEDURE [dbo].[TIGER_CREATE_RUNTIME_TABLE](@NOMBRE_TABLA varchar(100)) 
AS 
    DECLARE @SQLQUERY1 AS NVARCHAR(600) 
BEGIN 
    SET @SQLQUERY1 = 'CREATE TABLE '[email protected]_TABLA + '(
    SEGMENTO varchar(200) NULL, 
    TCNFOL varchar(200) NOT NULL, 
    TCCOPL_A varchar(200) NULL, 
    ID_LIN_NEG varchar(200) NULL, 
    TIP_LIN varchar(200) NULL, 
    MON_ID_MONEDA varchar(200) NULL, 
    LINEAS_FACT varchar(200) NULL, 
    CF_VOZ varchar(200) NULL, 
    CF_DATOS varchar(200) NULL, 
    ADIC_MINS varchar(200) NULL, 
    ADIC_LDN varchar(200) NULL, 
    ADIC_LDI varchar(200) NULL, 
    ADIC_SMS varchar(200) NULL, 
    PAQ_SMS varchar(200) NULL, 
    ADIC_DATOS varchar(200) NULL, 
    OTROS varchar(200) NULL, 
    SUB_TOT varchar(200) NULL, 
    PERIODO_ANALISIS varchar(200) NULL, 
    PERIODO_ALTA varchar(200) NULL, 
    CATEGORIA varchar(200) NULL, 
    RUC varchar(200) NULL)' 

    EXEC sp_ExecuteSql @SQLQUERY1 
END 

正如你所看到的,我使用動態SQL,但有一個錯誤,而我執行它。

男士。 102,Level 15,State 1,Line 20
「varch」附近的語法不正確。

動態SQL有什麼問題嗎?謝謝一段時間。

回答

5

我會改變你的@sqlquery1varchar(max),我覺得你打的字符限制時,你把你的表名:

DECLARE @SQLQUERY1 AS NVARCHAR(max) 

你有你的設置爲600您的查詢字符串的限制,但是當你加入一個表格名稱最多可達varchar(100)你很可能會超出限制。

如果你只運行沒有表名以下的len爲726個字符:

DECLARE @SQLQUERY1 AS NVARCHAR(max) 

SET @SQLQUERY1 = 'CREATE TABLE (
    SEGMENTO varchar(200) NULL, 
    TCNFOL varchar(200) NOT NULL, 
    TCCOPL_A varchar(200) NULL, 
    ID_LIN_NEG varchar(200) NULL, 
    TIP_LIN varchar(200) NULL, 
    MON_ID_MONEDA varchar(200) NULL, 
    LINEAS_FACT varchar(200) NULL, 
    CF_VOZ varchar(200) NULL, 
    CF_DATOS varchar(200) NULL, 
    ADIC_MINS varchar(200) NULL, 
    ADIC_LDN varchar(200) NULL, 
    ADIC_LDI varchar(200) NULL, 
    ADIC_SMS varchar(200) NULL, 
    PAQ_SMS varchar(200) NULL, 
    ADIC_DATOS varchar(200) NULL, 
    OTROS varchar(200) NULL, 
    SUB_TOT varchar(200) NULL, 
    PERIODO_ANALISIS varchar(200) NULL, 
    PERIODO_ALTA varchar(200) NULL, 
    CATEGORIA varchar(200) NULL, 
    RUC varchar(200) NULL)' 

select LEN(@sqlquery1) 

如果您留下您的查詢字符串在600長度的create table語句將被切斷,並將產生錯誤。

+0

創建語句是好的(如果拉出並自行運行),這是下一個邏輯點。 – Limey

+0

當你給予時,你擊中了標記。謝謝 –