小编And*_*y M的帖子

表损坏错误

我的 SQL Server 数据库有问题。今天打开看到一个错误——SQL Server Table Corruption Error。

我不知道这个错误的原因。我应用了 SQL Server Management Studio,但它无法完全恢复我的数据库。

有人知道修复 SQL Server 数据库的方法吗?

sql-server sql-server-2008-r2 corruption

4
推荐指数
1
解决办法
5771
查看次数

获取跨列的最大值、最小值

我想获得连续多列的最小值和最大值。我使用 CROSS APPLY、UPIVOT 和 VALUES 找到了各种工作查询,例如:

select column1, column2, code1,
       (qty2), (qty3), (qty4), (qty5),
       MinVal, MaxVal 
from dummydata 
    cross apply (select MIN(NULLIF (d ,0)) MinVal, 
                        Max(d) MaxVal 
                 FROM (VALUES (qty2), 
                              (qty3), 
                              (qty4), 
                              (qty5)
                      ) AS a(d) 
                )  A
Run Code Online (Sandbox Code Playgroud)

这些都在 SQL Server 2005 或更高版本中工作,但我需要 SQL Server 2000(数据库兼容级别 80)的解决方案。我怎样才能做到这一点?

DDL:

CREATE TABLE [dbo].[dummydata](
[column1] [nvarchar](255) NULL,
[column2] [nvarchar](255) NULL,
[code1] [nvarchar](255) NULL,
[qty2] [float] NULL,
[qty3] [float] NULL,
.......
[qty20] [float] NULL)
Run Code Online (Sandbox Code Playgroud)

查询输出:

在此处输入图片说明

sql-server sql-server-2000

4
推荐指数
1
解决办法
921
查看次数

确定散列 varchar 列的大小

我正在使用 SQL Server。

我有这张桌子:

create table MyTable (
ID int not null ,
Name varchar(500) )
Run Code Online (Sandbox Code Playgroud)

我正在添加一name_hash列来存储该name列的哈希值:

alter myTable
    add 
    name_hash AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), Name))
Run Code Online (Sandbox Code Playgroud)

如何确定 的结果大小name_hash?它与我想要应用散列的列的大小有关吗?

sql-server hashing

4
推荐指数
1
解决办法
1917
查看次数

如何在 SQL Server 中执行 UPSERT,返回预先更新的值?

所有语法都是有效的 PostgreSQL 作为 UPSERT 的示例,它返回字段的旧值和新值。比方说,我有一个表foo(1,A)...(5,E)

CREATE TEMP TABLE foo
AS
  SELECT id, chr(id+64)
  FROM generate_series(1,5) AS t(id);
CREATE UNIQUE INDEX ON foo(id);

 id | chr 
----+-----
 1  | A
 2  | B
 3  | C
 4  | D
 5  | E
(5 rows)
Run Code Online (Sandbox Code Playgroud)

现在,假设我想要 UPSERT 6 行。一些碰撞,一些新的行。

SELECT id, chr(id+74)
FROM generate_series(3,8) AS t(id);
 id | chr 
----+-----
  3 | M
  4 | N
  5 | O
  6 | P
  7 | Q
  8 | R …
Run Code Online (Sandbox Code Playgroud)

sql-server insert update upsert

4
推荐指数
1
解决办法
1505
查看次数

查看现有的表值参数

我看过很多关于如何创建表值参数的教程 - 但是如何在创建表值参数后查看它?

我更喜欢在 SSMS 中使用 GUI 的方法,但 T-SQL 也足够了。

sql-server t-sql sql-server-2008-r2 table-valued-parameters

4
推荐指数
1
解决办法
1157
查看次数

具有选择性别名的列

我想根据特定的列条件选择别名并输出所需的 XML。

假设我们有一个名为 的表ACCOUNTS

姓名年龄
--------- ---
约翰·多伊 30
玛丽巷 40
爱丽丝鲍勃 50

询问:

;WITH XMLNAMESPACES
(
  'http://www.w3.org/2001/XMLSchema-instance' AS abc, 'uri' AS def
)
SELECT 
     CASE WHEN AGE <= 30 THEN 'BUYER' AS [def:GIRL]
          WHEN AGE >=40 THEN 'SELLER' END AS [def:BOY]
FROM ACCOUNTS
FOR XML PATH('abc:OilCompany'), TYPE
Run Code Online (Sandbox Code Playgroud)

输出应该是:

 <abc:OilCompany>
   <def:GIRL>BUYER</def:GIRL>
   <def:BOY>SELLER</def:BOY>
   <def:BOY>SELLER</def:BOY>
 </abc:OilCompany>
Run Code Online (Sandbox Code Playgroud)

xml sql-server

4
推荐指数
1
解决办法
543
查看次数

Windows Server 2012 R2 Essentials 和 SQL Server 2014

首先,我不是专业的 IT 人员。我从戴尔为我们的极小型企业购买了一台服务器。它附带已安装的 Windows Server 2012 R2 Essentials。请注意,我得到这台服务器的主要原因是我们使用的一个设计软件必须利用 SQL Server,以便所有工作站共享数据文件。软件公司来为我进行设置并说我们无法在域控制器上安装 SQL Server 2014(对于为什么我仍然有点不知所措)。

我的问题如下:

– 有没有办法格式化服务器并重新安装 WS 2012 R2 E 而不将其设置为域控制器,以便 SQL Server 2014 可以工作?

其他信息,如果它可能相关:

  • 该服务器是新的,上面没有相关信息或数据,因此可以擦除它(假设这意味着在其上重新安装 WS)。

  • 这是一款 AutoDesk 产品。

  • 我们正在使用 Microvellum。

sql-server installation sql-server-2014

4
推荐指数
1
解决办法
1092
查看次数

如何在一条 SQL 语句中更新多行的多列

在我的 SQL Server 数据库中,我想更新多行的列。我只能为一行做:

UPDATE theTable
SET theColumn = case
WHEN id = 1 then 'a' 
WHEN id = 2 then 'b'
WHEN id = 3 then 'c'
WHERE id in (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

如何在同一查询中更新更多列(theColumn2、theColumn3...)?

sql-server update

4
推荐指数
2
解决办法
8万
查看次数

如何获取有关 Postgres 10 中新标识列背后的序列的信息?(生成 { 始终 | 默认} 作为身份)

Postgres 10 带来了 SQL 标准GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY特性的实现,松散地称为标识列。这个特性取代了 Postgres 自己的SERIAL伪类型,消除了它的问题/问题。有关更多信息,请参阅此处此处

GENERATED…优于的主要原因之一SERIAL是序列号生成器在后台透明处理。我们可以添加列、调整当前序列号和删除列,所有这些都无需明确引用序列。

CREATE TABLE tbl (
    col  BIGINT 
         GENERATED ALWAYS AS IDENTITY 
         PRIMARY KEY ,
    col2 text
) 
;
Run Code Online (Sandbox Code Playgroud)

和…

ALTER TABLE tbl
ALTER COLUMN col
RESTART WITH 1000
;
Run Code Online (Sandbox Code Playgroud)

和…

ALTER TABLE tbl
ALTER COLUMN col
DROP IDENTITY IF EXISTS
;
Run Code Online (Sandbox Code Playgroud)

或者…

ALTER TABLE tbl
ALTER COLUMN col
DROP COLUMN IF EXISTS …
Run Code Online (Sandbox Code Playgroud)

postgresql identity postgresql-10

4
推荐指数
1
解决办法
5136
查看次数

如果稍后查询失败,WITH 会发生什么

我绝不是数据库专家,所以我可能会问一些愚蠢的问题。

所以我正在使用 PostgreSQL,我想对一个表进行插入,保留 ID(ID 自动递增)并将一个元组插入另一个表(元组中有该 ID)。

显然我想让事情保持原子性。

询问:

WITH inserted AS (
  INSERT INTO
    "public"."user" (email, first_name, last_name, username)
  VALUES
    (?, ?, ?, ?)
  RETURNING id
)
INSERT INTO 
  "public"."security" (user_id, security)
VALUES((
  SELECT id FROM inserted
), ?);
Run Code Online (Sandbox Code Playgroud)

问题是,这甚至可以工作吗?如果第二次插入失败会发生什么?第一个会坚持下去吗?

显而易见的答案是,我可能会将其放入事务并提交/回滚,但这是否足够?

postgresql cte transaction

4
推荐指数
1
解决办法
485
查看次数