动态选择列(SQL存储过程) [英] Dynamically selecting column (SQL stored procedure)

查看:131
本文介绍了动态选择列(SQL存储过程)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个程序,该程序将更新单行中动态选择的列;而且此需求很重要.

我是新手,会明确表示帮助

主持人:
如何将值@InpArgXEl分配给PatternDtab(数据库表)的变量@ColumnID指示的列,该列的主键列是PattnRowID?

I AM CREATING A PROCEDURE THAT WOULD UPDATE A DYNAMICALLY SELECTED COLUMN IN A SINGLE ROW; AND THERE IS STRONG REASON FOR THIS NEEED.

I AM A NEWBIE AND WOULD APPRICIATE EXPLICIT HELP

THE POSER:
How do I assign the value @InpArgXEl to the column, indicated by the variable @ColumnID, of PatternDtab (the database table) which primary key column is PattnRowID?

ALTER PROCEDURE dbo.TransPayPattn	
(
 @InpArgXEl XML OUTPUT,
 @ColumnID NCHAR(10),
 @RowNo INT OUTPUT
)

SET @ColumnID = '['+@Column+']'

--Litrarilly
UPDATE PatternDtab SET @ColumnID = @InpArgXEl WHERE PattnRowID=@RowNo

--what is the RIGHT way to do this?
DECLARE @Cmd  VARCHAR(MAX)

SET @Cmd= N'UPDATE PatternDtab SET '+@ColumnID+' = @InpArgXEl WHERE PattnRowID=@RowNo'

EXECUTE sp_executesql @Cmd

-- Confirmation
SET @InpArgXEl = (SELECT ... -- I ALSO NEED TO RE-EVALUATE THE CURRENT VALUE OF @ColumnID

推荐答案

这里是使用sp_executesql的一个小示例.过程中的至少一个问题是您根本没有定义参数:
Here''s a small example of using the sp_executesql. At least one problem in your procedure is that you don''t define the parameters at all:
CREATE TABLE DynTest (
  col1 varchar(100),
  col2 int
);

INSERT INTO DynTest VALUES ('A', 1);

CREATE PROCEDURE DynTestProc (@colName varchar(100), @value int) AS
DECLARE @sql        nvarchar(2000);
DECLARE @parameters nvarchar(2000);
BEGIN
  set @sql = N'UPDATE DynTest SET ' + @colName + ' = ''B'' WHERE col2 = @valueinsql';
  set @parameters = N'@valueinsql int';

  print @sql;
  print @parameters;

  exec sp_executesql @sql, @parameters, @valueinsql = @value;
END;

EXEC DynTestProc 'col1',1

SELECT * FROM DynTest

EXEC DynTestProc 'nonexistentcol',1 <-- error


好,我知道了.
感谢Mika Wendelius和md_refay!
OK, I''VE GOT IT.
THANKS TO U Mika Wendelius AND TO U TOO md_refay!


我"只会写upata语句

声明@sql nvarchar(max)
选择@sql =''update DynTest Set''+ @ ColName +''=''''''+ @ InpArgXEl +''''其中PattnRowID =''+ convert(nvarchar(5),@ RowNo)

秘诀是您必须在''''
之间传递字符串值 希望对您有帮助
i ''ll write upata statment only

declare @sql nvarchar(max)
select @sql=''update DynTest Set ''+@ColName +'' = ''''''+@InpArgXEl+ '''''' where PattnRowID =''+convert(nvarchar(5),@RowNo)

the secret is u must pass string value between ''''
hope it be helpfull


这篇关于动态选择列(SQL存储过程)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆