我的 SQL Server 数据库有问题。今天打开看到一个错误——SQL Server Table Corruption Error。
我不知道这个错误的原因。我应用了 SQL Server Management Studio,但它无法完全恢复我的数据库。
有人知道修复 SQL Server 数据库的方法吗?
我想获得连续多列的最小值和最大值。我使用 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。
我有这张桌子:
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?它与我想要应用散列的列的大小有关吗?
所有语法都是有效的 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) 我看过很多关于如何创建表值参数的教程 - 但是如何在创建表值参数后查看它?
我更喜欢在 SSMS 中使用 GUI 的方法,但 T-SQL 也足够了。
我想根据特定的列条件选择别名并输出所需的 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) 首先,我不是专业的 IT 人员。我从戴尔为我们的极小型企业购买了一台服务器。它附带已安装的 Windows Server 2012 R2 Essentials。请注意,我得到这台服务器的主要原因是我们使用的一个设计软件必须利用 SQL Server,以便所有工作站共享数据文件。软件公司来为我进行设置并说我们无法在域控制器上安装 SQL Server 2014(对于为什么我仍然有点不知所措)。
我的问题如下:
– 有没有办法格式化服务器并重新安装 WS 2012 R2 E 而不将其设置为域控制器,以便 SQL Server 2014 可以工作?
其他信息,如果它可能相关:
该服务器是新的,上面没有相关信息或数据,因此可以擦除它(假设这意味着在其上重新安装 WS)。
这是一款 AutoDesk 产品。
我们正在使用 Microvellum。
在我的 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...)?
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,我想对一个表进行插入,保留 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)
问题是,这甚至可以工作吗?如果第二次插入失败会发生什么?第一个会坚持下去吗?
显而易见的答案是,我可能会将其放入事务并提交/回滚,但这是否足够?
sql-server ×8
postgresql ×2
update ×2
corruption ×1
cte ×1
hashing ×1
identity ×1
insert ×1
installation ×1
t-sql ×1
transaction ×1
upsert ×1
xml ×1