Transact SQL Server错误105

时间:2015-04-21 05:48:42

标签: sql-server transactions distributed-transactions

嘿伙计我正在创建一个商店程序,但我收到此错误: 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中的一半但是我已经调试并且在该变量中并且它已经完成,我已经检查过并且是的,该变量确实有足够的空间用于文本。

我感谢你们能给我提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

这是因为您使用了错误的@cmd数据类型。 sysname数据类型的长度限制为128个Unicode字符。

我还建议你尽量避免使用动态sql,因为它通常很容易受到SQL Injection攻击。