1

我的存储过程有问题

ALTER PROCEDURE [dbo].[TIGER_CREATE_RUNTIME_TABLE](@NOMBRE_TABLA varchar(100))
AS
    DECLARE @SQLQUERY1 AS NVARCHAR(600)
BEGIN
    SET @SQLQUERY1 = 'CREATE TABLE '+@NOMBRE_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,第 15 级,状态 1,第 20 行
'varch' 附近的语法不正确。

动态SQL有什么问题吗?谢谢一会儿。

4

1 回答 1

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 语句的长度处,则该语句将被截断并生成错误。

于 2012-12-10T19:04:53.350 回答