小编Clo*_*use的帖子

当SP包含#temp表时,使用OPENROWSET动态检索SP结果

我的情景

我正在开发一个数据库,该数据库将包含整个服务器上不同数据库中各种存储过程的许多详细信息.我现在试图收集的信息是"SP输出什么?"

在搜索中我发现答案在于OPENROWSET.我的初步测试成功,一切看起来都很棒.但是,在使用实时SP进行测试后,我遇到了一个主要问题:它与temp(#)表不兼容.

例如:

如果我要拿这个SP:

CREATE PROCEDURE dbo.zzTempSP(@A INT, @B INT) AS
SELECT @A AS A, @B AS B
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码轻松地将输出插入到临时(##)表中,然后查询tempdb的sysobjects并生成列及其数据类型的列表:

IF OBJECT_ID('tempdb.dbo.##TempOutput','U') IS NOT NULL DROP TABLE ##TempOutput

DECLARE @sql VARCHAR(MAX)
SELECT @sql = 'SELECT * 
               INTO ##TempOutput
               FROM OPENROWSET(''SQLNCLI'', ''Server=' + 
        CONVERT(VARCHAR(100), SERVERPROPERTY('MachineName')) +
                             ';Trusted_Connection=yes;'', ''SET FMTONLY OFF exec ' + 
                               DB_NAME() + 
                              '.dbo.zzTempSP @A=1, @B=2'')'
EXEC(@sql)

SELECT *
FROM ##TempOutput
Run Code Online (Sandbox Code Playgroud)

大!但是,如果SP是这样的:

CREATE PROCEDURE dbo.zzTempSP (@A INT, @B INT) AS CREATE TABLE dbo.#T (A INT, B INT)

INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql openrowset

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

在命令两列具有相同值的列时,在postgres中出现奇怪的排序错误(这是一个错误吗?)

我在postgres中有以下查询:

SELECT * 
FROM "bookings"
WHERE ("bookings".client_id = 50) 
ORDER BY session_time DESC 
LIMIT 20 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

第20位的记录与第21记录的会话时间相同.

此查询返回20个结果,但是如果将结果与整个数据库进行比较,则查询将返回第1-19个结果,第21个结果将跳过第20个结果.

可以通过向订单添加"id"来修复此查询:

SELECT * 
FROM "bookings" 
WHERE ("bookings".client_id = 50) 
ORDER BY session_time DESC, id 
LIMIT 20 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

但是我想知道这个错误是怎么发生的?在使用抵消和限额时,postgres如何订购相同的字段?是随机的吗?这是postgres的错误吗?

sql postgresql sql-order-by limit offset

8
推荐指数
1
解决办法
1095
查看次数

列出2 DateTimes的可用时间

我知道这个可能会有点令人困惑,我只是想着考虑最好的方法来解决这个问题!我现在在几个论坛上发布了这个,但我似乎没有任何运气.希望有人可以就如何做到这一点提出一些建议.

示例表(tbl_Bookings)

ID  DateStarted       DateEnded         RoomID
1   16/07/2012 09:00  16/07/2012 10:00    1
2   16/07/2012 12:00  16/07/2012 13:00    1
Run Code Online (Sandbox Code Playgroud)

基本上,我想输入2个日期时间,例如16/07/2012 08:30和16/07/2012 13:30,它将查询我上面的示例表并返回'可用'时间,IE,我喜欢输出以下内容.

16/07/2012 08:30 - 16/07/2012 09:00
16/07/2012 10:00 - 16/07/2012 12:00
16/07/2012 13:00 - 16/07/2012 13:30
Run Code Online (Sandbox Code Playgroud)

我的问题是,这完全可以在SQL中使用吗?我试着想一想如何在VB中做到这一点,我也在努力解决这个问题.我的想法/尝试一直在使用Ron Savage的fn_daterange(如下所示)

if exists (select * from dbo.sysobjects where name = 'fn_daterange') drop function fn_daterange;
go
create function fn_daterange
(
@MinDate as datetime,
@MaxDate as datetime,
@intval  as datetime
)
returns table
as
return
WITH times (startdate, enddate, intervl) AS
(
SELECT @MinDate as …
Run Code Online (Sandbox Code Playgroud)

.net sql vb.net sql-server-2008

7
推荐指数
1
解决办法
150
查看次数

T-SQL ORDER BY根据条件

我正在写一些资源管理系统.

资源是定义的实例.定义是元数据,基本上它包含属性.

这通常是我的DB:

TypeDefinition
id    name
===============
1     CPU


PropertyDefinition
id    name       typeDefinitionId   valueType
================================================
1     frequency  1                  int
2     status     1                  string


TypeInstance
id    name     typeDefinitionId
=================================
1     CPU#1    1  
2     CPU#2    1


PropertyInstanceValue
id   propertyDefinitionId  typeInstanceId   valueType   intValue  StringValue FloatValue
========================================================================================
1    1                     1                int         10
2    2                     1                string                Pending
3    1                     2                int         20
4    2                     2                string                Approved
Run Code Online (Sandbox Code Playgroud)

需求:

根据特定的属性值排序所有资源.

例如:根据状态排序所有资源- >含义CPU#2将出现在CPU#1之前,因为"已批准"在"待定"之前.

如果我们按照频率订购,CPU#1将出现在CPU#2之前,因为10在20之前.

所以我需要根据不同的列(intValue/stringValue/FloatValue/etc)对每次进行排序,具体取决于属性的valueType.

有什么建议吗?

局限性:

PIVOT目前是我们唯一想到的选择,但由于数据库很庞大,我不需要查询尽可能快.

非常感谢提前,

米哈尔.

sql t-sql database sql-server

7
推荐指数
1
解决办法
279
查看次数

sql server - 批量插入错误

我正在使用批量插入并获得以下错误:

注意:加载文件中的数据不是配置的列长度

运行命令:

从'C:\ temp\dataload\load_file.txt'批量插入load_data,其中(firstrow = 1,fieldterminator ='0x09',rowterminator ='\n',MAXERRORS = 0,ERRORFILE ='C:\ temp\dataload\load_file ")

加载文件的内容:

user_name   file_path   asset_owner   city      import_date    
admin       C:\         admin         toronto   04/12/2012
Run Code Online (Sandbox Code Playgroud)

错误:

消息4863,级别16,状态1,行1
第1行第6列的批量装入数据转换错误(截断)(已验证).
消息7399,级别16,状态1,行1
链接服务器"(null)"的OLE DB提供程序"BULK"报告错误.提供商未提供有关错误的任何信息.消息7330,级别16,状态2,行1
无法从OLE DB提供程序"BULK"获取链接服务器"(null)"的行.

sql sql-server

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

java For循环简单代码 - 输出说明

有人可以解释一下这段代码8 2是如何打印出来的吗?

public class Check{

    public static void main(String args[]){

        int x=0;
        int y=0;

        for(int z=0;z<5;z++){
            if(++x>2||++y>2){
               x++;
            }
         }

         System.out.println(x+" "+y);

    }
}
Run Code Online (Sandbox Code Playgroud)

java for-loop

7
推荐指数
3
解决办法
2866
查看次数

AS/400 DB2逻辑文件与表索引

我来自MSSQL背景,当我问我公司的人是否在某些列上创建了索引时,他们会说是,但请指出这些东西称为逻辑文件.

在iSeries Navigator中,这些逻辑文件显示在"视图"类别下.当我单击"索引"类别时,没有任何内容,这让我相信实际上没有在任何列上创建索引,至少我理解它们.逻辑文件似乎是按特定列排序的视图.

所以我的问题是,逻辑文件和索引(MSSQL意义上的索引)是一回事吗?

sql db2 indexing ibm-midrange

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

使用不同的数据连接两个相同的表结构

编辑:在尝试COALESCE方法之后,我现在看到一个问题,即每个瓦数类别的数据都在重复使用相同的数据.第2列是瓦数. 在此输入图像描述

我创建了两个临时表,两者都具有完全相同的表结构.在这些表中,有多个列可以具有相同的值,然后是一些具有不同数字的值列.其中一些在一列中为NULL,而在另一列中不为null.我希望将所有值组合在一起,并且在具有相同站点和工厂的行上,我希望将值加入.

下面是两个表的外观和我期望的结果的示例

表格1:

SITE      PLANT          VALUE_1           VALUE 2
S1        P1             54                66
S1        P2             43                43
Run Code Online (Sandbox Code Playgroud)

表2:

SITE      PLANT         VALUE_1           VALUE_2
S1        P1            33                43
S2        P1            34                22
Run Code Online (Sandbox Code Playgroud)

结果:

SITE      PLANT         t1_VALUE_1    t1_VALUE_2    t2_VALUE_1      t2_VALUE2
S1        P1            54            66            33              43
S1        P2            43            43            NULL            NULL
S2        P1            NULL          NULL          34              22
Run Code Online (Sandbox Code Playgroud)

我最初的想法是完全加入.但是,这不起作用,因为在您的select语句中,您必须指定从哪里抓取列,如站点和工厂; 但要选择t1.site和t2.site将生成两列.我得到的最接近的是下面的查询,但是只要S2中有一个站点和工厂不在S1中的结果,就会收到S1和S2的空值.

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site
AND t1.plant = t2.plant
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
1
解决办法
4965
查看次数

使用SQL检测异常间隔

我的问题很简单:我有一个包含一系列状态和时间戳的表(为了好奇,这些状态表示警报级别),我想查询此表以获得两种状态之间的持续时间.

看起来很简单,但这里有一个棘手的部分:我不能创建查找表,程序,它应该尽可能快,因为这个表是一个拥有超过10亿条记录的小怪物(不开玩笑!)...

架构很简单:

[pk]时间价值

(实际上,还有第二个PK,但这对此无用)

在真实世界的例子之下:

Timestamp          Status
2013-1-1 00:00:00    1
2013-1-1 00:00:05    2
2013-1-1 00:00:10    2
2013-1-1 00:00:15    2
2013-1-1 00:00:20    0
2013-1-1 00:00:25    1
2013-1-1 00:00:30    2
2013-1-1 00:00:35    2
2013-1-1 00:00:40    0

仅考虑2级警报的输出应如下所示,应报告2级警报的开始及其结束时(达到0时):

StartTime          EndTime            Interval
2013-1-1 00:00:05  2013-1-1 00:00:20     15
2013-1-1 00:00:30  2013-1-1 00:00:40     10

我一直在尝试各种各样的内部连接,但是所有这些都引导我进行了一次惊人的笛卡尔爆炸.你能帮助我找到一种方法来实现这个目标吗?

谢谢!

sql sql-server temporal-database sql-server-2008

6
推荐指数
1
解决办法
1105
查看次数

显式转换为已定义的类型会抛出`InvalidCastException`

我有一些使用显式强制转换操作定义的自定义包装器类型:

private class A
{
    private readonly int _value;

    public A(int value)
    {
        _value = value;
    }

    public int Value { get { return _value; } }
}

private class B
{
    private readonly int _value;

    private B(int value)
    {
        _value = value;
    }

    public int Value { get { return _value; } }

    public static explicit operator B(A value)
    {
        return new B(value.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下工作正常:

B n = (B)new A(5);
Run Code Online (Sandbox Code Playgroud)

这不是:

B n = (B)(object)new A(5);

// Throws …
Run Code Online (Sandbox Code Playgroud)

c# casting

6
推荐指数
1
解决办法
1009
查看次数