小编Álv*_*lez的帖子

无法将“CO2”更新为“CO”?在表格行中

鉴于此表:

CREATE TABLE test (
    id INT NOT NULL,
    description NVARCHAR(100) COLLATE Modern_Spanish_CI_AS NOT NULL
);
INSERT INTO test (id, description) VALUES (1, 'CO2');
Run Code Online (Sandbox Code Playgroud)

我意识到我无法解决排版问题:

SELECT * FROM test WHERE id = 1;
UPDATE test SET description = 'CO?' WHERE id = 1;
SELECT * FROM test WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

因为更新匹配但没有效果:

id          description
----------- -----------
1           CO2

(1 affected rows)

(1 affected rows)

id          description
----------- -----------
1           CO2

(1 affected rows)
Run Code Online (Sandbox Code Playgroud)

就好像 SQL Server 确定了这一点,因为? 显然只是一个很小的2 …

sql-server collation t-sql sql-server-2008-r2 unicode

20
推荐指数
2
解决办法
4044
查看次数

不能删除不存在的约束,也不能创建它

在使用生产数据的副本测试一些迁移脚本(脚本与开发数据一起运行良好)时,我发现了一个奇怪的情况。CONSTRAINT 已更改,因此我发出 DROP + ADD 命令:

ALTER TABLE A_DUP_CALLE
DROP CONSTRAINT A_DUP_CALLE_UK1;

ALTER TABLE A_DUP_CALLE
ADD CONSTRAINT A_DUP_CALLE_UK1 UNIQUE (
    CONTROL_ID,
    CALLE_AYTO_DUPL
)
ENABLE;
Run Code Online (Sandbox Code Playgroud)

DROP 命令运行良好,但 ADD 命令失败。现在,我陷入了一个恶性循环。我无法删除约束,因为它不存在(初始删除按预期工作):

ORA-02443: 无法删除约束 - 不存在的约束

我无法创建它,因为名称已经存在:

ORA-00955: 名称已被现有对象使用

A_DUP_CALLE_UK1在 SQL Developer 的搜索框中输入内容,然后……就在那里!所有者、表名、表景观……一切都匹配:它不是同名的不同对象,它我的原始约束。该表出现在约束详细信息中,但该约束未出现在表的详细信息中。

我的问题:

  • 对此有何解释?
  • 当我在实时服务器中进行真正的升级时,如何确保它不会发生?

(服务器是 10g XE,我没有足够的声望来创建标签。)

oracle oracle-10g oracle-xe

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

OPTIMIZER_FEATURES_ENABLE 的替代方案

我已经在客户端的 9i 服务器(Oracle9i Release 9.2.0.1.0 - 64bit Production)中安装了一个 PHP 驱动的应用程序。某些查询的性能很差(它可以使用 15 分钟到几个小时计算执行计划!)我已经将问题跟踪到参数的非默认值OPTIMIZER_FEATURES_ENABLE:9i 的默认值是9.2.0但客户将其更改为8.1.7. 当我在我的开发箱中进行相同的更改时,我遇到了相同的性能问题。

如果他们运行的是 Oracle 10 或更高版本,我可以自己为自己的会话更改它,但在 9i 中,它是一个需要为整个实例设置的静态参数。更改是在一段时间前进行的,目的是支持一个非常重要的遗留程序。客户目前正在等待第三方供应商的答复,但我觉得改变的可能性很小。

那么,如果参数需要保持不变,我有哪些选择?它的效果可以用其他可变设置来模拟吗?还有其他想法吗?

oracle oracle-9i

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

使列不可为空所需的代码

我有一个表,我错误地在列中允许 NULL 值:

CREATE TABLE EXAMPLE (
    EXAMPLE_ID INT IDENTITY(1, 1) NOT NULL,
    FOO_ID INT,
    CREATED_ON DATETIME DEFAULT CURRENT_TIMESTAMP, -- Oops!
    CODE VARCHAR(50),
    QUOTE DECIMAL(18,2),
    BAR_ID TINYINT NOT NULL DEFAULT 1,

    CONSTRAINT EXAMPLE_PK PRIMARY KEY (EXAMPLE_ID),

    CONSTRAINT EXAMPLE_FK1 FOREIGN KEY (FOO_ID)
    REFERENCES FOO (FOO_ID)
    ON DELETE CASCADE,

    CONSTRAINT EXAMPLE_FK2 FOREIGN KEY (BAR_ID)
    REFERENCES BAR (BAR_ID)
);

CREATE INDEX EXAMPLE_IDX1 ON EXAMPLE (FOO_ID);
CREATE INDEX EXAMPLE_IDX2 ON EXAMPLE (BAR_ID);
Run Code Online (Sandbox Code Playgroud)

这是一个相当不重要的列(没有索引,没有外键,没有在触发器中使用......),这是我通常修复它的方式:

ALTER TABLE EXAMPLE
ALTER COLUMN CREATED_ON DATETIME NOT NULL;
-- Runs …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server ssms t-sql

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

维护计划向导生成无效脚本?

我使用维护计划向导创建了一个计划。当我执行计划时,“维护清理任务”失败并显示以下错误消息:

执行查询“EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2016...”失败并出现以下错误:“执行扩展存储过程时出错:参数无效”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接建立不正确。

生成的 T-SQL 是这样的(根据日志文件查看器):

EXECUTE master.dbo.xp_delete_file 0,N'''',N'''',N''2016-01-25T13:50:30''

GO
Run Code Online (Sandbox Code Playgroud)

请注意,所有单引号都加倍。

日志查看器或向导中是否存在错误实际上生成了无效的 T-SQL 代码?


刚刚意识到如果我删除重复引号并手动运行查询,我会收到“执行扩展存储过程时出错:无效参数”:

EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2016-01-25T13:50:30'

GO
Run Code Online (Sandbox Code Playgroud)

sql-server ssms maintenance-plans sql-server-2014

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

从 SQL*Plus 中设置编码

我有一大组带有 SQL 命令的文件,我使用使用该@@运算符的 SQL*Plus 脚本运行这些文件。我在第三方计算机上运行该脚本(甚至通过电子邮件发送),因此我想使其尽可能独立。

文件编码为 Win-1252。目前,我需要NLS_LANG在运行脚本之前设置环境变量:

C:\> SET NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252

C:\> echo exit | sqlplus foo/bar@//example.com/xe @install.sql
Run Code Online (Sandbox Code Playgroud)

这有效,但我想知道是否可以使用 SQL 或 SQL*Plus 命令更改客户端编码。(或者至少读取值并在不匹配时中止执行。)

oracle sqlplus oracle-xe

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

数据库收缩任务失败

一周前我制定了一个维护计划,并且每晚都执行得很好。现在数据库收缩任务已停止工作并抛出此错误:

属性大小不可用于数据库“[foo]”。此对象可能不存在此属性,或者可能由于访问权限不足而无法检索。

昨天我安装了几个由 Windows 更新提供的 SQL Server 修补程序(4411 和 4457,如果有的话)。这是我可能做出的唯一改变。

我的任务是这样的:

  • 连接:本地服务器连接(sa)
  • 数据库: 所有数据库 所有用户数据库
  • 当数据库增长超过时收缩数据库:50 MB
  • 收缩后剩余的可用空间量 (10%)
  • 将释放的空间返回给操作系统

我的一些发现:

  • 如果我生成 T-SQL 代码并手动执行它,它将完美运行。
  • 如果我创建一个具有相同数据库收缩任务的新维护计划,它将完美运行。

问题是什么?

sql-server ssms sql-server-2016

0
推荐指数
1
解决办法
2903
查看次数