【问题标题】:SQL Server 2008: Error converting data type nvarchar to bigint when not converting anythingSQL Server 2008:在不转换任何内容时将数据类型 nvarchar 转换为 bigint 时出错
【发布时间】:2016-05-20 01:09:11
【问题描述】:

我遇到了一个错误

将数据类型 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)

就像我说的,我正在使用 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

所以我这边没有代码负责发送一个字符串应该是 int 的位置,反之亦然。像以前一样,如果我像使用 BuildID 参数一样取出 @SuiteID 参数,它将完美运行。为什么它认为传入的 13 是一个字符串,我不知道。

【问题讨论】:

  • ' + @suiteID + ' 等同于 '13' 是一个字符串

标签: sql-server stored-procedures bigint


【解决方案1】:

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

您的代码的修复方法是这样的。

, ' + CAST(@suiteID as nvarchar(4)) + '

【讨论】:

  • 错过了关闭括号?
  • 谢谢@Sean,真是个愚蠢的错误,这是我一天的大部分工作时间。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
猜你喜欢
  • 2017-05-06
  • 1970-01-01
  • 2012-09-25
  • 2011-08-15
  • 2012-02-26
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多