Die*_*eco 1 sql t-sql sql-server dynamic-sql
我的存储过程有问题
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
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用动态SQL,但执行它时出错.
男装.102,Level 15,State 1,Line
20'varch'附近的语法不正确.
动态SQL有什么问题吗?谢谢你一段时间.
我会改变你@sqlquery1
的varchar(max)
,我认为你在添加你的表名时达到了字符限制:
DECLARE @SQLQUERY1 AS NVARCHAR(max)
Run Code Online (Sandbox Code Playgroud)
您将查询字符串的限制设置为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)
Run Code Online (Sandbox Code Playgroud)
如果将查询字符串保留在600
create table语句的长度,则将被截断并生成错误.