开发者社区> 问答> 正文

用于变量表名称,列名称和值的SQL Server Update语句

我编写了以下存储过程,该存储过程从我的代码中接收值并根据表列数在循环中运行它,所有值都已存储在代码中并正确传递,这使我相信问题出在我的存储过程中。

这是我目前的错误:

将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]

展开
收起
祖安文状元 2020-01-04 15:43:11 661 0
1 条回答
写回答
取消 提交回答
  • @colValue 是varchar,所以应该在引号之间

    SET @str = N'UPDATE DBName..' + quotename(@tableName) + ' SET ' +quotename(@colName)+ ' = ''' +@colValue+ ''' WHERE ' +quotename(@colID)+ ' = ' +@colIDValue+ '';
    也 quotename() @tableName
    
    

    你应该看看sp_executeSQL而不是exec()

    2020-01-04 15:43:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载