我编写了以下存储过程,该存储过程从我的代码中接收值并根据表列数在循环中运行它,所有值都已存储在代码中并正确传递,这使我相信问题出在我的存储过程中。
这是我目前的错误:
将nvarchar值'UPDATE DBName..TableName SET [名称] =测试WHERE [pkJMParamsID ='转换为数据类型int'时,转换失败
我可以通过更改@colIDValue为a 来解决此问题varchar,这不应该是因为pk是一个int,但是如果执行此操作,我将得到的下一个错误是'Test Update'不是有效的列名,即使在我的语法上也很困难。在最重要的位置,所以我一定做错了什么。
注意:分配给参数的值仅用于测试。请告诉我是否需要更多信息。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spName]
@tableName VARHAR(255) = 'a table Name',
@colName VARCHAR(255) = 'Name',
@colValue VARCHAR(MAX) = 'Test',
@colID VARCHAR(255) = 'pkJMParamsID',
@colIDValue INT = 1
AS
BEGIN TRY
DECLARE @str AS VARCHAR(MAX)
SET @str = N'UPDATE DBName..' + @tableName + ' SET ' +quotename(@colName)+ ' = ' +@colValue+ ' WHERE ' +quotename(@colID)+ ' = ' +@colIDValue+ '';
EXEC (@str)
SELECT 1 AS 'Result','' as 'Error'
END TRY
BEGIN CATCH
SELECT 0 AS 'Result',
ERROR_MESSAGE() as 'Error'
END CATCH
--EXEC [dbo].[spName]
@colValue 是varchar,所以应该在引号之间
SET @str = N'UPDATE DBName..' + quotename(@tableName) + ' SET ' +quotename(@colName)+ ' = ''' +@colValue+ ''' WHERE ' +quotename(@colID)+ ' = ' +@colIDValue+ '';
也 quotename() @tableName
你应该看看sp_executeSQL而不是exec()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。