首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL删除多个表错误子查询返回的值超过1个。

问T-SQL删除多个表错误子查询返回的值超过1个。
EN

Stack Overflow用户
提问于 2018-12-06 16:45:34
回答 2查看 58关注 0票数 0

我有下面的their来删除在tblCtrlTable中有它们的名称的表

代码语言:javascript
复制
Declare @Cmd nvarchar(max)

select @cmd = ( 
SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME IN (SELECT [TEST_TABLE] from tblCtrlTable WHERE FieldX=1 and FieldY = 'Pass'))

print @cmd

--EXECUTE sp_executesql @cmd

但是,我一直收到错误:

子查询返回的值超过一个。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。

我哪里出问题了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 16:50:27

这里有一种你这样做的方法。它不能确保价值的顺序,但它是超级快速和容易。不太清楚为什么要检查object_id是否有效,though....it不能为NULL,因为它是一个表。而且您知道它是一个表,因为您正在查询INFORMATION_SCHEMA.TABLES. :)

代码语言:javascript
复制
Declare @Cmd nvarchar(max) = '' --Notice this is initially set to an empty string.

select @cmd = @cmd + 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME IN (SELECT [TEST_TABLE] from tblCtrlTable WHERE FieldX=1 and FieldY = 'Pass')

print @cmd
票数 2
EN

Stack Overflow用户

发布于 2018-12-06 16:50:48

尝试表变量而不是变量:

代码语言:javascript
复制
Declare @Cmd TABLE (QUERY nvarchar(max))

INSERT INTO @Cmd(QUERY)
SELECT
            'IF OBJECT_ID(''' + TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;'
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME IN (SELECT
                [TEST_TABLE]
            FROM tblCtrlTable
            WHERE FieldX = 1
            AND FieldY = 'Pass')


SELECT * FROM @cmd
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53656039

复制
相关文章

相似问题

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