【发布时间】:2019-04-01 06:55:11
【问题描述】:
我有一个带有stg_table 列的元数据表。这是dbo 模式中STAGE 数据库表的名称。当 insert_type 列是“选择”时,如果光标存在,我想删除表。
元数据示例:https://imgur.com/a/TfyIWpv
还有我的光标代码:
declare kursor cursor for
select *
from METADATA.dbo.META_SOURCESTAGE;
declare @insert_type varchar(15),
@stg_table varchar(30),
@src varchar(80),
@SQL varchar(254);
open kursor
fetch next from kursor into @insert_type, @stg_table, @src;
while @@FETCH_STATUS = 0
begin
if @insert_type = 'select'
begin
select @SQL = 'IF OBJECT_ID('+@stg_table+') IS NOT NULL DROP TABLE '+@stg_table
exec(@SQL)
fetch next from kursor into @insert_type, @stg_table, @src;
end
if @insert_type = 'bulk'
execute ('truncate table ' + @stg_table);
print @stg_table;
fetch next from kursor into @insert_type, @stg_table, @src;
end
close kursor;
deallocate kursor;
我想通过在 METADATA 表中创建的游标从 STAGE.dbo.* 中删除所有现有表。
我得到一个错误:
消息 4104,第 16 级,状态 1,第 2 行
无法绑定多部分标识符“STAGE.dbo.STG_KLIENT”。 STAGE.dbo.STG_MELDUNEK消息 4104,第 16 级,状态 1,第 2 行
无法绑定多部分标识符“STAGE.dbo.STG_MIEJSCOWOSC”。
STAGE.dbo.STG_PRACOWNIK
@编辑 更改了代码 - 添加了开始/结束,但仍然出现相同的错误。
【问题讨论】:
-
如果你想在
IF之后执行多个语句,你必须使用一个BEGIN .... END块 - 否则只 下一条语句在IF部分内 - 在所有情况下都将执行除此之外的任何内容......
标签: sql sql-server tsql