[英]SQL Error - bad syntax
我有以下T-SQL查詢從一系列表中刪除記錄:
DELETE FROM config INNER JOIN config_profile ON config.config_id = config_profile.config_id
INNER JOIN config_page ON config_profile.config_profile_id = config_page.config_profile_id
INNER JOIN config_field ON config_page.config_page_id = config_field.config_page_id
INNER JOIN config_constraint ON config_field.config_field_id = config_constraint.config_field_id
INNER JOIN config_constraint_type ON config_constraint.config_constraint_type_id = config_constraint_type.config_constraint_type_id
WHERE config.config_name = 'ConfigName' AND config_profile.profile_name = 'ProfileName'
但它一直在拋出錯誤:
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'INNER'.
看着它,我不確定我錯過了什么。 任何幫助表示贊賞。
你需要兩個FROM我知道它很奇怪
DELETE
FROM CONfig
FROM
config
INNER JOIN config_profile ON config.config_id = config_profile.config_id
INNER JOIN config_page ON config_profile.config_profile_id = config_page.config_profile_id
INNER JOIN config_field ON config_page.config_page_id = config_field.config_page_id
INNER JOIN config_constraint ON config_field.config_field_id = config_constraint.config_field_id
INNER JOIN config_constraint_type ON config_constraint.config_constraint_type_id = config_constraint_type.config_constraint_type_id
WHERE config.config_name = 'ConfigName' AND config_profile.profile_name = 'ProfileName'
如果您在這里查看在線幫助的語法
[ WITH <common_table_expression> [ ,...n ] ]
DELETE
[ TOP (expression ) [ PERCENT ] ]
[ FROM ]
{ <object> | rowset_function_limited
[ WITH ( <table_hint_limited> [ ...n ] ) ]
}
[ <OUTPUT Clause> ]
[ FROM <table_source> [ ,...n ] ]
[ WHERE { <search_condition>
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( <Query Hint> [ ,...n ] ) ]
[; ]
<object> ::=
{
[ server_name.database_name.schema_name.
| database_name. [ schema_name ] .
| schema_name.
]
table_or_view_name
}
第一個是
FROM是一個可選關鍵字,可以在DELETE關鍵字和目標table_or_view_name或rowset_function_limited之間使用。
第二個來自
FROM指定其他FROM子句。 DELETE的Transact-SQL擴展允許從第一個FROM子句中的表中指定數據並從中刪除相應的行。
可以使用此擴展(指定連接)代替WHERE子句中的子查詢來標識要刪除的行。
有關更多信息,請參閱FROM(Transact-SQL)。
正如托尼指出的那樣,你可以選擇刪除第一個FROM,這樣它的可讀性就會提高一些
DELETE
Config
FROM
config ....
我添加了一些表別名來清理查詢,但關鍵是你需要兩個FROM:一個用於DELETE,一個用於查詢本身。
DELETE FROM c
FROM config c
INNER JOIN config_profile cp
ON c.config_id = cp.config_id
INNER JOIN config_page cpg
ON cp.config_profile_id = cpg.config_profile_id
INNER JOIN config_field cf
ON cpg.config_page_id = cf.config_page_id
INNER JOIN config_constraint cc
ON cf.config_field_id = cc.config_field_id
INNER JOIN config_constraint_type cct
ON cc.config_constraint_type_id = cct.config_constraint_type_id
WHERE c.config_name = 'ConfigName'
AND cp.profile_name = 'ProfileName'
或省略第一個FROM
DELETE c
FROM config c
INNER JOIN config_profile cp
ON c.config_id = cp.config_id
INNER JOIN config_page cpg
ON cp.config_profile_id = cpg.config_profile_id
INNER JOIN config_field cf
ON cpg.config_page_id = cf.config_page_id
INNER JOIN config_constraint cc
ON cf.config_field_id = cc.config_field_id
INNER JOIN config_constraint_type cct
ON cc.config_constraint_type_id = cct.config_constraint_type_id
WHERE c.config_name = 'ConfigName'
AND cp.profile_name = 'ProfileName'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.