我写了一个有 > 100 个选项的 case 语句,在一个简单的查询中,我在 4 个地方使用了相同的语句。
相同的查询两次,它们之间有一个联合,但也在进行计数,因此 group by 也包含 case 语句。
这是为了重新标记某些公司名称,其中同一公司的不同记录拼写不同。
我试图将一个变量声明为 VarChar(MAX)
declare @CaseForAccountConsolidation varchar(max)
SET @CaseForAccountConsolidation = 'CASE
WHEN ac.accountName like ''AIR NEW Z%'' THEN ''AIR NEW ZEALAND''
WHEN ac.accountName LIKE ''AIR BP%'' THEN ''AIR BP''
WHEN ac.accountName LIKE ''ADDICTION ADVICE%'' THEN ''ADDICTION ADVICE''
WHEN ac.accountName LIKE ''AIA%'' THEN ''AIA''
...
Run Code Online (Sandbox Code Playgroud)
当我在我的 select 语句中使用它时 - 查询只是将 case 语句作为文本返回并且没有对其进行评估。
我也无法在组中使用它 - 我收到以下错误消息:
Each GROUP BY expression must contain at least one column that is not …
Run Code Online (Sandbox Code Playgroud) 我不确定这是否可能,但我希望它是 - 我目前正在运行 SSMS 并且有一个数据库,它的数据全部“存放”在 DBO 模式中。我收到了建议(并且完全同意),最佳实践是创建与我们的业务功能相匹配的其他模式,我将继续推进。
我想知道是否有任何方法 - 即使是通过安装某种加载项,让架构崩溃,以便我可以隐藏所有 DBO 和 RPT 对象,直到我扩展架构 - 很多就像表格和其他文件夹被折叠一样。
如果这个问题不是本网站的“主题”,我深表歉意 - 但我认为这是最有可能知道答案的地方。
在我下面的屏幕截图中 - 我正在寻找要折叠的红色轮廓的位,现在只有 2 行 DBO - 以及我目前请求创建的 RPT:
我在可以创建表和存储过程的数据库中有一个用户帐户。
我想确认此用户帐户是否可以创建模式 -无需先尝试。(我是金融的一部分,而不是 IT。)
如果我可以创建模式,那么我会请求 IT 许可继续这样做。
如果我不能,那么我将继续等待 IT 在我前段时间提出的服务台请求上执行此操作(叹气)。
有没有我可以在 SSMS 中运行的命令,它可以在不实际创建新模式的情况下告诉我这一点?
我还截取了该用户权限的几个屏幕截图 - 也许他们会有答案?
编辑:
运行下面 SQLServing 建议的 SQL 后,我得到了这个结果:
UserName is_disabled principal_type_desc class_desc object_name permission_name permission_state_desc
DWReports 0 SQL_USER DATABASE NULL CONNECT GRANT
DWReports 0 SQL_USER OBJECT_OR_COLUMN GetSystemSQLAgentJobList EXECUTE GRANT
Run Code Online (Sandbox Code Playgroud)