sql中有没有一种干净的方法来基于case语句创建select语句?
我正在寻找基本逻辑像
CASE @tableToUse
WHEN 'Table1' SELECT * FROM Table1
WHEN 'Table2' SELECT * FROM table2
DEFAULT 'Table3' SELECT * FROM table3
END CASE
Run Code Online (Sandbox Code Playgroud)
在T-Sql(MS SQL Server)中,您可以动态地编写SQL语句,然后使用sp_executesql方法执行它。根据您的case语句,您可以使用变量构建SELECT语句,然后使用sp_executesql运行它。需要注意的一件事是,如果直接使用用户文本来防止SQL注入攻击,则需要确保清除用户提供的所有输入。
例如,
DECLARE @sql NVARCHAR(200)
SELECT @sql = CASE @tableToUse
WHEN 'Table1' THEN 'SELECT * FROM Table1'
WHEN 'Table2' THEN 'SELECT * FROM Table2'
ELSE 'Table3' THEN 'SELECT * FROM Table2'
END
EXECUTE sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
您应该能够在其他版本的SQL中执行类似的操作。
小智 5
嗯,这是旧的,但如果它有帮助:
CASE WHEN <Variabe> THEN (SELECT <Column> FROM <Table>) END
Run Code Online (Sandbox Code Playgroud)