我在执行此SQL语句时遇到问题。我是TSQL的新手,我不知道如何解决这个问题。每次执行此操作时,都会收到错误:
在上下文中指定的非布尔类型的表达式 条件是预期的,接近')'。
关键字'其他'附近的语法不正确。
if
SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14
print 'Batch 2014';
else
print 'Batch 2013';
我在这里尝试做的是在我的表格中搜索所有用户' 13'作为“Num'”列中的前两个数字,然后打印“批量2014”和#39;否则'批次2013'请帮忙:)谢谢
答案 0 :(得分:0)
IF EXISTS ( SELECT Num
FROM users
WHERE SUBSTRING(CAST(Num AS VARCHAR(6)), 1, 2) = 14 )
PRINT 'Batch 2014' ;
ELSE
PRINT 'Batch 2013' ;
答案 1 :(得分:0)
最好避免在存在时使用if-else
。为什么呢?
EXISTS的另一个好处是,一旦找到匹配的单个记录就会停止处理。如果您正在检查主键,这不会产生巨大影响。如果您根据另一个字段检查是否存在,它确实会产生很大的影响
if exists (SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)), 1, 2) = 14)
print 'Batch 2014';
else
print 'Batch 2013';`
答案 2 :(得分:0)
Num的类型是什么?
IF-ELSE
的语法:
-- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
所以," SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14
"应返回布尔值True
或False
。
IF EXISTS (SELECT Num from users where SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14)
答案 3 :(得分:0)
您的if
条件会返回非布尔值(0
或1
的其他值),这是导致错误的原因。
如果您使用的是if .. exists
,则如果表格中的任何数字满足条件SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) = 14
,则会打印。
如果您想查看具有批处理信息的用户,请使用CASE语句。
SELECT userid,Name -- mention the columns you wanted to select
,CASE WHEN SUBSTRING(CAST(Num AS VARCHAR(6)),1,2) =14 THEN 'Batch 2014'
ELSE 'Batch 2013' END Batch
FROM users