【问题标题】:Taking input of Column name to a Variable and Updating the input Column Values using Cursor将列名输入到变量并使用光标更新输入列值
【发布时间】:2017-06-13 08:10:39
【问题描述】:

尝试从表中获取表名和列名的输入(具有要修改的表和列的列名)并修改表的列值(从要修改的表接收输入)

DECLARE @TABLE_1 NVARCHAR(MAX)--Passing Table name  to Modify
DECLARE @COLUMN_NAME NVARCHAR(300)--Passing Column name to modify
DECLARE INPUT_CURSOR CURSOR FOR 
/*Actual Table contains which Table and Column to modify*/
SELECT TABLE_NAME,COLUMN_NAME FROM INPUT
OPEN INPUT_CURSOR
FETCH NEXT FROM INPUT_CURSOR INTO @TABLE_1, @COLUMN_NAME
WHILE @@FETCH_STATUS=0
BEGIN
SET @TABLE_1='TABLE_NAME'-- INPUT TABLE_NAME
SET @COLUMN_NAME='COLUMN_NAME'--INPUT COLUMN_NAME
DECLARE @EXEC_SQL NVARCHAR(MAX)--To execute Dynamic SQL Update Statement
SET @EXEC_SQL= 'UPDATE'+'  ['+@TABLE_1+'] '+'SET'+'
'+@COLUMN_NAME+'=REVERSE( (999999999-'+@COLUMN_NAME+'))'
EXEC(@EXEC_SQL)
FETCH NEXT FROM INPUT_CURSOR INTO @TABLE_1,@COLUMN_NAME
END
CLOSE INPUT_CURSOR
DEALLOCATE INPUT_CURSOR

Receiving Error
Msg 208, Level 16, State 1, Line 1
Invalid object name 'TABLE_NAME'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'TABLE_NAME'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'TABLE_NAME'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'TABLE_NAME'.

【问题讨论】:

    标签: sql-server tsql cursor dynamic-sql


    【解决方案1】:
    DECLARE INPUT_CURSOR CURSOR FOR 
    
    /*Actual Table contains which Table and Column to modify*/
    SELECT TABLE_NAME, COLUMN_NAME FROM INPUT 
    
    /*Cursor invokes each table and column name to be modified Passed to
    @Table_1,@Column_Name*/
    OPEN INPUT_CURSOR
    DECLARE @TABLE_1 NVARCHAR(300)--Passing Table name  to Modify
    DECLARE @COLUMN_NAME NVARCHAR(300)--Passing Column name to modify
    FETCH NEXT FROM INPUT_CURSOR INTO @TABLE_1, @COLUMN_NAME
    WHILE @@FETCH_STATUS=0
    BEGIN
    DECLARE @EXEC_SQL NVARCHAR(MAX)--To execute Dynamic SQL Update Statement
    SET @EXEC_SQL= 'UPDATE'+'  ['+@TABLE_1+'] '+'SET'+'  '+@COLUMN_NAME+ 
    '=REVERSE( (999999999-'+@COLUMN_NAME+'))'
    EXEC(@EXEC_SQL)
    FETCH NEXT FROM INPUT_CURSOR INTO @TABLE_1,@COLUMN_NAME
    END
    CLOSE INPUT_CURSOR
    DEALLOCATE INPUT_CURSOR
    

    【讨论】:

      【解决方案2】:

      很可能你的问题在这里:

      SET @TABLE_1='TABLE_NAME'-- INPUT TABLE_NAME
      SET @COLUMN_NAME='COLUMN_NAME'--INPUT COLUMN_NAME
      

      Fetch 语句将值放入每条记录的变量中。在这些 set 语句中,您将它们重新设置为 'TABLE_NAME' 和

      的静态值

      【讨论】:

        猜你喜欢
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 2017-05-25
        相关资源
        最近更新 更多