1 sql sql-server if-statement set
我在这个SQL代码上失去了理智.当使用简单的PRINT语句进行测试时,下面的IF ELSE语句正常运行,即表不存在,因此它打印'FALSE'.但是当我取消注释SET语句并执行时,它会尝试运行SET语句,并自然地给出和错误,因为表不存在.
DECLARE @zeus_calls310_counter int;
IF EXISTS (SELECT * FROM [zeus].tpza.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'calls_310')
BEGIN
--SET @zeus_calls310_counter = (SELECT COUNT(*) FROM [zeus].[tpza].[dbo].[calls_310]);
PRINT 'TRUE'
END
ELSE
BEGIN
PRINT 'FALSE';
END
Run Code Online (Sandbox Code Playgroud)
你的标题表明你的理解出错了.在表不存在的情况下,不是SET语句运行并且给出错误; 这是在解析语句时出现错误.
每当运行一些SQL时,服务器首先解析该语句,然后,如果解析成功,则运行它.所以你不能拥有依赖于表存在的裸SQL!无论表是否存在,您的SET语句都将被解析 - 所以当它不存在时,解析失败.
对此的一个解决方案是包装那些依赖于可能存在或不存在的对象的语句EXEC.但是,在这种情况下,您希望使用该表上的查询结果填充变量,并且EXEC该变量内部不在范围内.所以我们需要更多关于你正在做什么的细节@zeus_calls310_counter- 如果它将在不久之后使用,也许你可以把整个事情,包括它的声明包装在一个EXEC.