这是为了构建我们将用于报告的一些视图。
我有一个位置表,关键字段是 "location" 和 "parent"。
这两个字段创建的结构在级别上是沿着公司名称 --> 校园名称 --> 建筑物名称 --> 楼层名称 --> 房间名称。在这种情况下,公司名称保持不变,校园名称保持不变。
位置的结构通常如下所示:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Run Code Online (Sandbox Code Playgroud)
每个位置都链接回其父位置,最终是组织名称。目前,只有一个组织和一个校区。
构建一个小型 Web 应用程序以创建带有默认问题和响应列表的满意度调查。该应用程序适用于一小部分人(最多 5,000 人),并在工作订单完成后发送调查问卷。
鉴于小尺寸和相对简单的要求,我想我可以使用 SQL 或 NoSQL 解决方案(我可以轻松访问两者)。
对您的想法感兴趣并提供任何有助于某人做出客观决定的信息。
有人错误地在数据库表中创建了一堆 nchar 字段。我注意到了这一点,在检查了这个问题之后,我们将这些字段移动到 nvarchar 类型并修剪里面的值。
在我的脚本中,我目前仅限于拉取具有 nchar 类型的表,假设由表提供的视图知道更新它们的值。这个假设是否正确,或者我也应该在这个列表中包含视图?
作为参考,当前形式的脚本如下(主要取自这个伟大的 SO 答案):
declare @tn nvarchar(128)
declare @cn nvarchar(128)
declare @ln int
declare @sql as nvarchar(1000)
declare c cursor for
select cols.table_name,cols.column_name,cols.character_maximum_length
from information_schema.columns cols
inner join information_schema.tables tabs
on (cols.TABLE_SCHEMA = tabs.TABLE_SCHEMA and cols.TABLE_NAME = tabs.TABLE_NAME)
where cols.data_type ='nchar' and tabs.TABLE_TYPE = 'BASE TABLE'
open c
fetch next from c into @tn, @cn, @ln
while @@FETCH_STATUS = 0
begin
set @sql = 'alter table ' + @tn + …
Run Code Online (Sandbox Code Playgroud) 我希望这应该是可重现的。
我在 Oracle 11g 上。我作为另一个查询的一部分使用的这个查询的行为很奇怪:
SELECT TRUNC(SYSDATE - ROWNUM) DATEITEM
FROM DUAL
CONNECT BY ROWNUM <= 32
UNION
SELECT TRUNC(SYSDATE + ROWNUM) DATEITEM
FROM DUAL
CONNECT BY ROWNUM <= 32
order by dateitem desc;
Run Code Online (Sandbox Code Playgroud)
这应该以降序返回今天日期前后 32 天。
它一直有效,一直有效,直到今天。
出于某种原因,这不会返回 9 月 26th。它从 25 号跳到 27 号。
我想不出这其中的韵律或原因。例如,这个查询确实在 25 日返回了 25 日(所以我没有证据表明它只遗漏了 sysdate,因为它昨天有效)。
我到底做错了什么?