标签: functions

SQL Server SMO 和 PowerShell 格式

我可能已经看这个太久了,无法弄清楚这一点......

  1. 我可以将其导出为 CSV 格式的最简单方法是什么?
  2. 将它更容易地转储到数据库中的表会更好吗?我将从我有一个实例运行的中央服务器上运行它。

下面的函数用于提取有关 SQL Server 实例的一个或多个数据库的信息。到目前为止,我知道这适用于 SQL 2005 及更高版本。

我已经使用过,Format-Table但最终会切断列。我使用了Output-Filewhich 可以工作但默认为列表视图,这可能很难进入 Excel。它还会切断超过一定长度的列数据。

编辑:此功能的目的是针对 100 多台服务器运行它以收集每个实例的清单。

PowerShell 功能:


# Load SMO
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')

function Get-DatabaseInfo ($server,$dbname)
{
    $srv = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $server

    $db = $srv.Databases.Item($dbname)

    $DataFile = $db | Select -ExpandProperty FileGroups | Select -ExpandProperty Files
    $LogFile = $db | Select -ExpandProperty LogFiles
    $tables = $db | Select -ExpandProperty tables | ? {$_.IsSystemObject -eq $false}
    $indexes = $tables | Select -ExpandProperty Indexes |  ? …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell smo functions

5
推荐指数
1
解决办法
1048
查看次数

自定义 Postgres 功能不起作用

我编写了这个函数,它应该遍历文本数组并将每个元素(这是一个类型转换的整数)转换为十六进制,附加到文本变量,然后返回十六进制。然而,我什么也得不到。

有没有人看到该函数有任何问题会导致它不返回任何内容?

CREATE OR REPLACE FUNCTION array_convert_to_hex(text[])
RETURNS text
AS
$$
DECLARE
   arrInts ALIAS FOR $1;
   retVal text;
BEGIN
   FOR I IN array_lower(arrInts, 1)..array_upper(arrInts, 1) LOOP
    retVal := retVal || lpad(cast(to_hex(arrInts[I]::integer) as varchar), 2, '0');
   END LOOP;
RETURN retVal;
END;
$$
LANGUAGE plpgsql
   STABLE
RETURNS NULL ON NULL INPUT;
Run Code Online (Sandbox Code Playgroud)

postgresql functions

5
推荐指数
2
解决办法
1195
查看次数

Oracle 从 WHERE 子句中提取慢速函数调用

我有一个 oracle 表,其中日期存储为自特定日期以来的分钟数。它看起来像这样:

CREATE TABLE MY_TABLE
(
  SOMETHING     NUMBER(15,1) NOT NULL,
  START_MINUTE  NUMBER(15,1) NOT NULL,
  STOP_MINUTE   NUMBER(15,1) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我编写了两个函数来在所谓的“分钟”和它们代表的实际日期/时间之间进行转换。它们看起来像这样:

CREATE OR REPLACE FUNCTION FROM_MINUTE (MINUTE_IN IN NUMBER)
RETURN DATE AS
BEGIN
  /* Minute 0 = 12/30/1899 12:00am */
  RETURN (TO_DATE('1899-12-30', 'YYYY-MM-DD') + (MINUTE_IN / 1440));
END FROM_MINUTE;

CREATE OR REPLACE FUNCTION TO_MINUTE (DATE_IN IN DATE)
RETURN NUMBER AS
BEGIN
  /* Minute 0 = 12/30/1899 12:00am */
  RETURN
    (TRUNC(DATE_IN, 'DD') - TO_DATE('12/30/1899', 'MM/DD/YYYY')) * 1440 +
    TO_NUMBER(TO_CHAR(DATE_IN, 'HH24'))  * …
Run Code Online (Sandbox Code Playgroud)

oracle functions

5
推荐指数
1
解决办法
4294
查看次数

如何访问PL/pgSQL中RETURNs累积的行数

表演时

RETURN QUERY ...
Run Code Online (Sandbox Code Playgroud)

在 PL/pgSQL 函数中,之后是否可以直接访问累积到记录堆中的行数,在函数结束时返回这些行数?

例子:

RETURN QUERY SELECT * FROM tableA; -- 14 records
RETURN QUERY SELECT * FROM tableB; -- 8 records
RETURN QUERY SELECT * FROM tableC; -- 22 records
Run Code Online (Sandbox Code Playgroud)

累积记录的数量现在应该是 44。

postgresql plpgsql functions

5
推荐指数
1
解决办法
8220
查看次数

多语句 TVF 上的 WITH SCHEMABINDING 是否会改进基数估计?

根据查询性能和多语句表值函数等文章,SQL Server 假设多行表值函数返回一行。如果它实际上返回许多行,这会导致为调用语句选择一个糟糕的执行计划。

添加SCHEMABINDING到函数是否会导致函数返回值集的基数估计更正确?

如果我们假设我们将一个UserId传递给这个函数并返回一个RecordId值的表,该表允许用户访问,并且一些用户只被允许查看一些记录,而一些用户被允许查看很多甚至所有记录,函数或调用语句(或包含它们的过程)是否会从使用中受益RECOMPILESCHEMABINDING函数中的使用会改变这个答案吗?

我意识到我可以通过实验来解决这个问题,但我希望有人已经找到了答案。指向有详细记录的地方的指针会有所帮助。

sql-server-2005 sql-server functions cardinality-estimates

5
推荐指数
1
解决办法
1374
查看次数

优化来自 MySQL SP/触发器/函数的查询

我必须调查一个 MySQL 生产服务器,在调查时我发现一个DELETE查询的状态"SHOW PROCESSLIST"超过 400 秒preparing我试图在慢日志中找到查询,但我无法在慢日志中找到查询。

mysql> show full processlist;
+------+-----------------+---------------------+-----------+---------+------+-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Id   | User            | Host                | db        | Command | Time | State                       | Info                                                                                                                                                                                                                                                                                                         |
+------+-----------------+---------------------+-----------+---------+------+-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|    2 | event_scheduler | localhost           | NULL      | Daemon  |  204 | Waiting for next activation | NULL                                                                                                                                                                                                                                                                                                         | 
| 7229 | root            | 192.168.1.178       | mydb      | Connect |  204 | preparing                   | DELETE
          FROM    TEST_DATA_1
         WHERE ID in
                (SELECT ID
                   FROM …
Run Code Online (Sandbox Code Playgroud)

mysql trigger stored-procedures functions

5
推荐指数
1
解决办法
1457
查看次数

如何在sql server 2008中为数据库的存储过程、触发器和函数创建备份?

我在 2 个不同的服务器(.246 和 .252)中有 2 个数据库。我需要为 252 服务器中的所有存储过程、触发器和函数创建备份,并在 246 服务器中恢复它。两台服务器中的数据库名称都是 transcredit。252台服务器中大约有500SP。谁能帮我?

trigger sql-server backup stored-procedures functions

5
推荐指数
1
解决办法
3万
查看次数

通过 Postgres 触发器中的键分配给 NEW

在触发器主体中,如何NEW通过其字段名称为其分配值?
这就是我想要做的:

some_key = "some_column";
NEW[some_key] = 5;
Run Code Online (Sandbox Code Playgroud)

postgresql trigger plpgsql functions

5
推荐指数
1
解决办法
5655
查看次数

如何在 MySQL (redux) 中创建用户定义的聚合函数?

好吧,我可能会因为第二次问同样的问题而被禁止,但我在这里是一个令人难以置信的新手,我被告知我没有足够的声誉来评论原始问题。

我同意 OP (Matt Fenwick) 在如何创建用户定义的聚合函数中回答 5 的评论因为它给了一条鱼一天,但真正的问题是学习如何钓鱼。

我需要一个 GROUP BY 聚合函数,例如 MIN 函数,但是在调用 SMALL(t.value, 2) 时它返回第二小的数据元素,在调用 SMALL(t.value, 3) 时它返回第三个最小的数据元素,等等。(这实际上适用于 LibreOffice Calc 的 SMALL 函数,顺便说一句。)

我提出这个问题的特殊原因的问题是我想将大学课程的评分电子表格转换为 MySQL 数据库,并且我需要删除两个最低的出勤分数、两个最低的作业分数和两个最低的测验每个学生的分数,以计算他们调整后的出勤率、调整后的家庭作业平均值和调整后的测验平均值,以及对数据的其他调整。

tblQuizzes 看起来像

mysql> select * from tblQuizzes LIMIT 12;
+------------+---------+-----------+
| StudentKey | QuizKey | QuizGrade |
+------------+---------+-----------+
|          1 |       1 |     0.123 |
|          2 |       1 |     0.456 |
|          3 |       1 |     0.789 |
|          4 |       1 |     0.890 |
|          5 …
Run Code Online (Sandbox Code Playgroud)

mysql functions

5
推荐指数
1
解决办法
1215
查看次数

尽管持久计算列与持久计算列定义中的 UDF 性能受到影响,但隐式转换警告

我需要一个计算列来解决隐式转换问题。我有一个声明为 VARCHAR 的列,它应该只存储整数,但偶尔会被带有字符串的第三方应用程序错误填充,因此该列需要保持原样。

该表通常连接到一个将该值存储为 INT 的表。我定义了一个 PERSISTED 计算列,用于将该 VARCHAR 转换为 INT:

[iOrderNumber] AS (CONVERT([int],
case
   when [ordernumber] like '#%' then (-99) when isnumeric([ordernumber])=(0) then (-99) 
   when CONVERT([bigint],[ordernumber],(0))>(2147483647) then (-99)
   else [ordernumber]
end,(0))) PERSISTED NOT NULL
Run Code Online (Sandbox Code Playgroud)

使用计算列上的适当索引,现在可以连接到 INT 列的查询的性能显着提高。但是,即使在更新表而不是读取表时发生转换,执行计划仍会显示隐式转换警告。

我尝试在计算列定义中使用 UDF 来消除警告(我找到了一篇建议这样做的博客文章),但随后我的查询的执行时间更长,并且使用了更多的 CPU,尽管逻辑读取保持不变。但是 UDF 确实消除了警告。

除了错误之外,还有其他理由考虑警告吗?是否有理由将优化器对使用 UDF 定义的持久计算列的处理视为错误?

更重要的是,有没有办法摆脱警告,而不会招致 UDF 解决方案的性能损失?

我考虑使用触发器和包含数据的 VARCHAR 和 INT 版本的转换表,而不是使用计算列,但这似乎是很多不必要的开销。

sql-server functions warning computed-column

5
推荐指数
2
解决办法
889
查看次数