我有以下查询:
SELECT '['+name+']' FROM sys.schemas
Where name <> 'dbo' AND name <> 'guest' AND name <> 'INFORMATION_SCHEMA'
....
Run Code Online (Sandbox Code Playgroud)
此查询的结果很简单:
在这样的每条记录之后我需要一个带有文本'GO'的额外行:
有没有办法做到这一点?我尝试了一个foreach声明,但我无法复制所需的结果.
Sha*_*rza 24
只需按Enter键将Go语句添加到动态代码中,然后在SSMS中查看粘贴的结果.这将填充GO下一行中的语句.
您还应该使用QUOTENAME而不是自己连接方括号(以便正确使用包含的名称]),并且可以简化where子句NOT IN.
SELECT QUOTENAME(name) +'
GO
'
FROM sys.schemas
WHERE name NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA')
Run Code Online (Sandbox Code Playgroud)
sag*_*agi 13
您可以通过使用UNION ALL以填充这些额外值以及CASE EXPRESSION在此ORDER BY子句中使用此特定顺序来执行此操作:
SELECT t.name_col
FROM(
SELECT '['+name+']' as name_col,'['+name+']' as ord_col
FROM sys.schemas
Where name NOT IN('dbo','guest','INFORMATION_SCHEMA')
UNION ALL
SELECT 'GO','['+name+']' as ord_col
FROM sys.schemas
Where name NOT IN('dbo','guest','INFORMATION_SCHEMA')) t
ORDER BY t.ord_col,
CASE WHEN t.name_col = 'GO' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 12
如果你只想要回车并在每一行之后"GO",你可以把它放在SELECT:
SELECT '[' + name + ']
GO'
FROM sys.schemas
Where name <> 'dbo' AND name <> 'guest' AND name <> 'INFORMATION_SCHEMA'
....
Run Code Online (Sandbox Code Playgroud)
这不是您要求的,但它可能会满足您的需求.
select c.txt
from sys.schemas cross apply (values ('['+name+']'),('GO')) c(txt)
where name not in ('dbo','guest','INFORMATION_SCHEMA')
Run Code Online (Sandbox Code Playgroud)
保证订单
select c.txt
from sys.schemas s cross apply (values ('['+name+']',1),('GO',2)) c(txt,ord)
where s.name not in ('dbo','guest','INFORMATION_SCHEMA')
order by s.name,c.ord
Run Code Online (Sandbox Code Playgroud)