SQL Server 2008:在不转换任何内容时将数据类型nvarchar转换为bigint时出错

Joe*_*aci 0 sql-server stored-procedures bigint

我收到了一个错误

将数据类型nvarchar转换为bigint时出错

当我没有转换任何东西时.我正在做的就是尝试插入新记录.存储过程如下所示,如果我带走了我的bigint参数,它可以完美地工作.这也在SQL Server Management Studio中进行测试,因此我端的任何代码缺陷都不是问题.

ALTER PROCEDURE dbo.sp_generateTestTable
    @suiteID AS bigint,
    @testXml AS nvarchar(128),
    @platXml AS nvarchar(128),
    @table AS nvarchar(32)

    DECLARE @QUERY VARCHAR(2000) = ''
    SET @QUERY = 'INSERT INTO SACT.dbo.' + @table + '(BUILD_ID, SUITE_ID, ISAUTOMATED, DATESTARTED, TESTXML, PLATFORMXML)
 VALUES (3568, ' + @suiteID + ', 1, GETDATE(), ''' + @testXml + ''', '''  + @platXml +''' ) '

    EXECUTE (@QUERY)
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我正在使用SQL Server Management Studio对此进行测试

DECLARE @return_value int

EXEC    @return_value = dbo.sp_generateTestTable
        @testXml = N'mytest.xml'
        ,@platXml = N'myplatform.xml'
        ,@table = N'BoulderHMI'
        ,@suiteID = 13
Run Code Online (Sandbox Code Playgroud)

因此,我的代码上没有代码负责发送一个int应该是的字符串,反之亦然.像以前一样,如果我拿出@SuiteID param就像我做了BuildID参数一样,它将完美无瑕地工作.为什么它认为传入的13是一个字符串,我不知道.

Sea*_*nge 5

问题是您必须将@SuiteID转换/转换为nvarchar.这是编码的方式,它将隐式转换为最高阶数据类型,在这种情况下将是int.它试图对字符串值进行数学运算.

你的代码的修复就是这个.

, ' + CAST(@suiteID as nvarchar(4)) + '
Run Code Online (Sandbox Code Playgroud)