交易 SQL 服务器错误 105
Transact SQL Server Error 105
大家好,我正在创建一个存储过程,但我收到了这个错误:
105 Unclosed quotation mark after the character string 'Guadalajara,Jal'.
,我浏览了几个网站,遗憾的是我没有找到答案。
这是我的代码:
Alter Procedure Insertar
(
@Vuelos nvarchar(6),
@Aero nvarchar(20),
@Sal nvarchar(40),
@Ori varchar(50),
@Des varchar(50),
@Lle nvarchar(40),
@Per nvarchar(1),
@Nom nvarchar(25),
@Nodo nvarchar(13)
)
AS
BEGIN
Set XACT_ABORT ON
Begin DISTRIBUTED TRANSACTION
BEGIN TRY
Insert into Reservaciones values
(
@Vuelos,@Aero,@Sal,@Ori,@Des,@Lle,@Per,@Nom,GETDATE()
)
DECLARE @cmd as sysname;
SET @cmd ='Insert into ['+@Nodo+'].'+'['+@Aero+'].[dbo].[Reservaciones] values'+
'('''+@Vuelos+''','''+@Aero+''','''+@Sal+''','''+@Ori+''','''+@Des+''','''+@Lle+''','+@Per+','''+@Nom+''',GETDATE())'
EXEC(@cmd)
SET @cmd='Update ['+@Nodo+'].['+@Aero+'].[dbo].[Vuelos] Set Dis-='+@Per+' where Vuelo='+@Vuelos;
EXEC(@cmd)
END TRY
BEGIN CATCH
PRINT ERROR_NUMBER()
PRINT ERROR_MESSAGE()
ROLLBACK
END CATCH
IF @@TRANCOUNT > 0
commit
END
这就是我输入到存储过程中的内容
EXEC Insertar 'AM 500','Mexicana','2015-05-13 19:00:00.0','Guadalajara,Jalisco,Mexico','San Diego,California,Estados Unidos','2015-05-13 21:21:00.0',3,'gus','Gustavo\Nodo1';
更具体地说,问题是 sql 正在削减变量 @Ori
中一半的内容,但是我已经调试并在该变量中并且它是完整的,我已经检查并且是的那个变量space 确实有足够的文本。
非常感谢你们能为我提供的任何帮助。
这是因为您为@cmd 使用了错误的数据类型。
sysname 数据类型的长度限制为 128 个 Unicode 字符。
我还建议您尽量避免使用动态 sql,因为它通常很容易受到 SQL Injection 攻击。
大家好,我正在创建一个存储过程,但我收到了这个错误:
105 Unclosed quotation mark after the character string 'Guadalajara,Jal'.
,我浏览了几个网站,遗憾的是我没有找到答案。
这是我的代码:
Alter Procedure Insertar
(
@Vuelos nvarchar(6),
@Aero nvarchar(20),
@Sal nvarchar(40),
@Ori varchar(50),
@Des varchar(50),
@Lle nvarchar(40),
@Per nvarchar(1),
@Nom nvarchar(25),
@Nodo nvarchar(13)
)
AS
BEGIN
Set XACT_ABORT ON
Begin DISTRIBUTED TRANSACTION
BEGIN TRY
Insert into Reservaciones values
(
@Vuelos,@Aero,@Sal,@Ori,@Des,@Lle,@Per,@Nom,GETDATE()
)
DECLARE @cmd as sysname;
SET @cmd ='Insert into ['+@Nodo+'].'+'['+@Aero+'].[dbo].[Reservaciones] values'+
'('''+@Vuelos+''','''+@Aero+''','''+@Sal+''','''+@Ori+''','''+@Des+''','''+@Lle+''','+@Per+','''+@Nom+''',GETDATE())'
EXEC(@cmd)
SET @cmd='Update ['+@Nodo+'].['+@Aero+'].[dbo].[Vuelos] Set Dis-='+@Per+' where Vuelo='+@Vuelos;
EXEC(@cmd)
END TRY
BEGIN CATCH
PRINT ERROR_NUMBER()
PRINT ERROR_MESSAGE()
ROLLBACK
END CATCH
IF @@TRANCOUNT > 0
commit
END
这就是我输入到存储过程中的内容
EXEC Insertar 'AM 500','Mexicana','2015-05-13 19:00:00.0','Guadalajara,Jalisco,Mexico','San Diego,California,Estados Unidos','2015-05-13 21:21:00.0',3,'gus','Gustavo\Nodo1';
更具体地说,问题是 sql 正在削减变量 @Ori
中一半的内容,但是我已经调试并在该变量中并且它是完整的,我已经检查并且是的那个变量space 确实有足够的文本。
非常感谢你们能为我提供的任何帮助。
这是因为您为@cmd 使用了错误的数据类型。 sysname 数据类型的长度限制为 128 个 Unicode 字符。
我还建议您尽量避免使用动态 sql,因为它通常很容易受到 SQL Injection 攻击。