根据我目前的理解,服务的名称对于实例是全局的,您可以在不知道哪个数据库包含服务和关联队列等的情况下引用它们。此外,您可以在同一实例的不同数据库中拥有相同的服务,并且在这种情况下,您应该使用路由,也可以在开始对话对话时使用 service_broker_guid 来区分它们。
有没有比在所有数据库中查看服务名称存在于哪些数据库中更好的方法?
sys.services 目录视图仅限于特定数据库上下文中,可以是当前数据库,也可以使用完全限定的 database_name.sys.services 进行调用。
特别是,我有一些触发器需要向另一个数据库中的服务发送消息,但是如果服务不存在,或者如果该服务有两个数据库,或者数据库名称是不同等
如果性能太慢而无法每次都在触发器中进行所有这些安全检查,我可以进行定期维护检查以删除它们,但是无论触发器是否一直存在,我仍然想知道是否有最好的方法服务在实例中完全定义在一个或多个数据库中。
我确实设法提出了这个动态 SQL,但这可能必须在 proc 或其他东西中进行:
USE master;
DECLARE @DatabasePattern AS varchar(max) = '%';
DECLARE @ServicePattern AS varchar(max) = '%';
DECLARE @SQLTemplate AS varchar(max) = 'UNION ALL
SELECT database_id = {database_id}
, database_name = ''{database_name}''
, service_name = s.[name]
, service_broker_guid = ''{service_broker_guid}''
FROM {database_name}.sys.services s
WHERE s.[name] LIKE ''' + REPLACE(@ServicePattern, '''', '''''') + '''
';
DECLARE @SQL AS varchar(max);
WITH Statements AS (
SELECT SQL = REPLACE(REPLACE(REPLACE(@SQLTemplate
,'{database_id}', db.[database_id])
,'{database_name}', …Run Code Online (Sandbox Code Playgroud) 我有一个支点,其中我与坦克编号签订了合同,以 ; 分隔。我已经得到了这个例子来将它们向下旋转成行(有效):
SELECT oks_c.contract_number,
oks_l.line_id,
oks_l.tank_numbers, column_value AS TANK_NUMBER
FROM oks_contract_header oks_c
INNER JOIN oks_contract_lines oks_l
ON oks_l.contract_number = oks_c.contract_number AND
oks_l.item_name LIKE '%.55201'
, table(str2tbl(oks_l.tank_numbers,';')) acbb
ORDER BY oks_c.contract_number,
oks_l.line_id,
TANK_NUMBER
Run Code Online (Sandbox Code Playgroud)
这是流水线函数:
CREATE OR REPLACE function DBRAJAH.str2tbl( p_str in varchar2, p_delim in varchar2 default ',' ) return
str2tblType
PIPELINED
as
l_str long default p_str || p_delim;
l_n number;
begin
loop
l_n := instr( l_str, p_delim );
exit when (nvl(l_n,0) = 0);
pipe row( ltrim(rtrim(substr(l_str,1,l_n-1))) );
l_str := substr( …Run Code Online (Sandbox Code Playgroud) 所以我跑去sp_Blitz处理一些系统。有一些代码可以像往常一样清理。一些应该是聚集索引的堆。等等。
这个特定的查询使用了文字,似乎产生了很多计划。在此查询中的表上整理了索引和内容,甚至为最新的代码/数据库将查询参数化以投入生产。
但是查询仍然显示为参数化问题。(DBA 帮助将计划缓存查询转换为 SSRS 报告,因此我可以从浏览器在 PROD 环境中快速运行它们)。
然后去哪儿?忽略它?(似乎很多计划都很重要)
使用强制参数化?(但显式参数化的那个出现了)。
呃 - 我看到开发人员没有接受我的建议,认为它LEFT JOIN正在变成INNER JOIN......我必须把它修好......
SQL Server 2012 中是否有办法获取特定日期/时间的服务器时区?在 SQL Server 2016 中,您有AT TIME ZONE,但在 2012 年不可用。我有一个datetimeoffset,我需要将其转换为服务器的时区(在那个日期),然后再将其截断为datetime. SWITCHOFFSET仅当您知道偏移量时才有效,但对于每年更改两次时区的服务器,偏移量会来回翻转。
此查询说明了 SQL Server 2016 中的功能:
SELECT @@SERVERNAME AS [SERVERNAME]
, GETDATE() AT TIME ZONE 'Central Standard Time' AS [GETDATE() AT TIME ZONE 'Central Standard Time']
, GETDATE() AT TIME ZONE 'Eastern Standard Time' AS [GETDATE() AT TIME ZONE 'Eastern Standard Time']
, DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard Time' AS [DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard …Run Code Online (Sandbox Code Playgroud) 我有类似的东西:
SELECT a, b
INTO v_a, v_b
FROM (
SELECT x, y
FROM whatever
UNION
SELECT z, w
FROM something
) AS subquery (a, b)
Run Code Online (Sandbox Code Playgroud)
这当然在 Oracle 中不起作用(该语法 - 除了 INTO 和可选的 AS)在 SQL Server 中会很好http://sqlfiddle.com/#!6/b7dcf/1
是否有替代方法(这需要我将别名放在里面),其中列别名在外面:
SELECT a, b
INTO v_a, v_b
FROM (
SELECT x AS a, y AS b
FROM whatever
UNION
SELECT z, w
FROM something
) subquery;
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!6/c12e1/1 - 当然适用于 SQL Server 和 Oracle
我反对内部锯齿的原因是它不利于维护,显然,如果在该部分上方添加新部分,则锯齿会受到打击。
我需要写一个数据仓库图。我的工作人员区域有问题。我必须存储有关工人详细信息(如姓名、年龄等)以及工人工作时间和协议详细信息(如 job_start、job_end、薪水等)的信息。
首先,我试图为每个数据绘制一个维度,但我考虑是否应该像这些维度之间的联系那样做?
sql-server ×3
oracle ×2
oracle-10g ×2
datetime ×1
pivot ×1
plan-cache ×1
sp-blitz ×1
timezone ×1