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

@sqlquery1私はあなたをに変更しますvarchar(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)

クエリ文字列をcreatetableステートメントの長さにしたままにすると、600ステートメントが切断され、エラーが生成されます。

于 2012-12-10T19:04:53.350 に答える