2012-12-10 63 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

当你给予时,你击中了标记。谢谢 –