Sql server SQL Server 2008:在不转换任何内容时,将数据类型nvarchar转换为bigint时出错
我犯了一个错误 将数据类型nvarchar转换为bigint时出错 当我不转换任何东西的时候。我所做的就是尝试插入一张新唱片。存储过程如下图所示,如果我去掉Sql server SQL Server 2008:在不转换任何内容时,将数据类型nvarchar转换为bigint时出错,sql-server,stored-procedures,bigint,Sql Server,Stored Procedures,Bigint,我犯了一个错误 将数据类型nvarchar转换为bigint时出错 当我不转换任何东西的时候。我所做的就是尝试插入一张新唱片。存储过程如下图所示,如果我去掉bigintparams,它将正常工作。这也正在SQLServerManagementStudio中进行测试,所以我这方面的任何代码缺陷都不是问题所在 ALTER PROCEDURE dbo.sp_generateTestTable @suiteID AS bigint, @testXml AS nvarchar(128),
bigint
params,它将正常工作。这也正在SQLServerManagementStudio中进行测试,所以我这方面的任何代码缺陷都不是问题所在
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)
正如我所说,我正在SQLServerManagementStudio中使用
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转换成nvarchar。按照这种编码方式,它将隐式转换为最高顺序的数据类型,在本例中为int。它试图对字符串值进行数学运算 对代码的修复是这样的
, ' + CAST(@suiteID as nvarchar(4)) + '
问题是您必须将@SuiteID转换为nvarchar。按照这种编码方式,它将隐式转换为最高顺序的数据类型,在本例中为int。它试图对字符串值进行数学运算 对代码的修复是这样的
, ' + CAST(@suiteID as nvarchar(4)) + '
“++@suiteID+”与“13”相同,后者是一个字符串“++@suiteID+”与“13”相同,后者是一个字符串错过了最后一段?谢谢@Sean,多愚蠢的错误啊,这是我工作的大部分时间。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊