如果 SQL 中 NOT EXISTS 则不起作用

1 t-sql sql-server if-statement exists

我把它放在 SQL Server 2008 的 SQL 查询编辑器中,但不起作用:

If not EXISTS (Select * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA= 'dbo' AND TABLE_NAME='PK01')
    CREATE TABLE [dbo].['PK01'] (Articulo varchar(MAX),Referencia varchar(MAX),Lote varchar(MAX),Cantidad Int,Ubicacion varchar(MAX));
    INSERT INTO [UBICACIONES].[dbo].['PK01'] (Articulo,Referencia,Lote,Cantidad,Ubicacion)VALUES ('998','kk','ll',0,'pp')
else
    UPDATE [UBICACIONES].[dbo].['PK01'] Set Cantidad = (Cantidad + 23) WHERE Articulo LIKE '998'         
Run Code Online (Sandbox Code Playgroud)

我收到错误:

消息 156,级别 15,状态 1,第 4 行关键字“else”附近的语法不正确。

Ste*_*veB 5

if 语句仅作用于 IF 之后的第一个语句,除非您在语句周围放置 BEGIN/END。这就是我喜欢在一个语句 IF 周围使用 BEGIN/END 的原因。

If not EXISTS (Select * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA= 'dbo' AND TABLE_NAME='PK01')
BEGIN
    CREATE TABLE [dbo].['PK01'] (Articulo varchar(MAX),Referencia varchar(MAX),Lote varchar(MAX),Cantidad Int,Ubicacion varchar(MAX));
    INSERT INTO [UBICACIONES].[dbo].['PK01'] (Articulo,Referencia,Lote,Cantidad,Ubicacion)VALUES ('998','kk','ll',0,'pp')
END
ELSE
BEGIN
    UPDATE [UBICACIONES].[dbo].['PK01'] Set Cantidad = (Cantidad + 23) WHERE Articulo LIKE '998'         
END
Run Code Online (Sandbox Code Playgroud)

  • @panki,这是因为它创建的表将在名称中包含单引号,`['PK01']`不应该有任何引号。 (2认同)