首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableName的案例陈述

TableName的案例陈述
EN

Stack Overflow用户
提问于 2014-09-19 08:37:52
回答 2查看 1.6K关注 0票数 0

我想要创建一个基于发送条件更新表列的存储过程。我写的问题不起作用。

首先,如果我试图将表名设置为变量。

代码语言:javascript
复制
Create Procedure Proc_Test
@Tblname varchar(20)
AS BEGIN

Update @Tblname
Set IsValid = 1;

End

这是失败的。

第二,我试过的是案件陈述

创建过程Proc_Test @Tblname varchar(20)作为开始

代码语言:javascript
复制
Case @Tblname 
WHEN 1 THEN Update tbl1 set ISValid = 1;

WHEN 2 THEN Update tbl2 set ISValid = 1;

End

结束

这也会引发异常。

还有其他方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-19 08:47:49

如果您希望表名是可变的,则需要使用动态sql,否则需要使用条件语句根据表名进行筛选,如果没有太多的表名可以进行筛选。

条件法

代码语言:javascript
复制
declare @Tblname varchar(20) = 'Table1'

if @Tblname = 'Table1'
begin
    update Table1
    set IsValid = 1
    -- where some condition is met?
end

if @Tblname = 'Table2'
begin
    update Table2
    set IsValid = 1
    -- where some condition is met?
end

动态Sql方法

代码语言:javascript
复制
declare @SQLString nvarchar(100);
declare @Tblname varchar(20) = 'Table1'

set @SQLString = N'update ' + @Tblname + ' set IsValid = 1';

execute sp_executesql @SQLString
票数 6
EN

Stack Overflow用户

发布于 2014-09-19 08:45:28

试试这个-

代码语言:javascript
复制
CREATE PROCEDURE Proc_Test
@Tblname VARCHAR(20)
AS 

BEGIN
DECLARE @SQL varchar(1000);
SET @SQL = 'Update '+@Tblname+' Set IsValid = 1;'
EXECUTE (@SQL);
END
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25929698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档