小编why*_*heq的帖子

DateKey YYYYMMDD应该是char(8)吗?

我们仓库中无处不在的两个最重要的字段是UserAccountKey和DateKey.

  • DateKey是(int,not null)
  • UserAccountKey是(int,not null)

这些是正确的数据类型吗?

WH是在2006年创建的,所以类型Date不是一个选项,虽然我们现在正在运行,2008-R2所以它现在是WH的下一次迭代的选项.这是一个完善的WH,它有多个立方体和一个完整的报告系统.上面的另外一个问题是,在创建WH时,架构师是否更好地将DateKey作为类型Char(8)而不是INT

sql data-warehouse sql-server-2008-r2

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

这是防御性代码还是存在可以解决问题的可能性?

我有以下代码,它连接到db>运行存储过程>然后继续.

我认为很容易让db编程错误,所以保持防守是很重要的:以下是防守吗?(或者可以改进吗?)

public int RunStoredProc()
{
SqlConnection conn = null;
SqlCommand dataCommand = null;
SqlParameter param = null;
int myOutputValue;

try
{
    conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);                  
    conn.Open();
    dataCommand = conn.CreateCommand();
    dataCommand.CommandType = CommandType.StoredProcedure;
    dataCommand.CommandText = "pr_blahblah";
    dataCommand.CommandTimeout = 200; //seconds
    param = new SqlParameter();
    param = dataCommand.Parameters.Add("@NumRowsReturned", SqlDbType.Int);
    param.Direction = ParameterDirection.Output;
    dataCommand.ExecuteNonQuery();
    myOutputValue = (int)param.Value;

    return myOutputValue;
}
catch (SqlException ex)
{
    MessageBox.Show("Error:" + ex.Number.ToString(), "Error StoredProcedure");
    return 0;
}
finally
{
    if (conn != null)
    {
        conn.Close(); …
Run Code Online (Sandbox Code Playgroud)

c# sql-server-2008-r2

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

将Void一词排除在包括Void之外?

这些都一样吗?

public void MyMethod() {do something}

public MyMethod() {do something}

void意味着什么也不返回 - 所以留下这个关键词也意味着什么都不返回?如果是这种情况那么为什么这个词存在于语言中 - 是否在其他情况下使用?

c#

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

让SqlDataAdapter和SqlCommand混淆

我有这个调用方法:

public string RunReportSteps(int _reportKey) {
    DataTable fStepsTable;
    fStepsTable =  GetStepsTable("xxx.console.pr_xxx");
    return (string)fStepsTable.Rows[1][3];
}
Run Code Online (Sandbox Code Playgroud)

它调用这个私有方法:

private DataTable GetStepsTable(string procName) {
    var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
    using(var conn = new SqlConnection(connectionString))
    using(var adapt = new SqlDataAdapter())
    using(var cmd = new SqlCommand(procName, conn)) {

        conn.Open();

        SqlParameter p = new SqlParameter("@ReportKey", this.ReportKey);
        p.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(p);
        adapt.SelectCommand = cmd;

        DataSet mySet = new DataSet();
        adapt.Fill(mySet);     //<<<<<<<<<<<<<<<<<<<errors here
        return mySet.Tables[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我收到以下错误消息?

过程或函数'pr_xxx'需要参数'@ReportKey',这是未提供的.

c# sql-server ado.net

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

尝试在一个事务中查询然后更新表

规格为存储过程是:
要选择并返回Id从我的表tb_r12028dxi_SandpitConsoleProofClient,一旦我选择了这个纪录,它需要被标记(顺序并不重要刚刚找到会做顶1) 'P',这样它不会选择再次.

这是存储过程:

ALTER PROCEDURE [dbo].[r12028dxi_SandpitConsoleProofSweep]
    @myId INT OUTPUT
AS

/*
DECLARE @X INT
EXECUTE [xxx].[dbo].[r12028dxi_SandpitConsoleProofSweep] @X OUTPUT
SELECT @X
*/

DECLARE @NumQueue INT = (
            SELECT [cnt] = COUNT(*) 
            FROM xxx.DBO.tb_r12028dxi_SandpitConsoleProofClient
            WHERE [Status] IS NULL
            );
IF @NumQueue > 0 
    BEGIN

        BEGIN TRANSACTION;

        DECLARE @foundID INT = (SELECT TOP 1 Id FROM xxx.DBO.tb_r12028dxi_SandpitConsoleProofClient WHERE [Status] IS NULL);

        UPDATE x
        SET x.[Status] = 'P'
        FROM xxx.DBO.tb_r12028dxi_SandpitConsoleProofClient x
        WHERE x.Id = @foundID 

        SET @myId = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2

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

SQL中BETWEEN子句的真正目的是什么?

要正确使用索引,必须将过滤谓词设置为搜索参数,因此DATETIME在这种情况下不能使用函数.

您需要使用<=>=操作数进行日期和时间比较,但也有BETWEEN条款.

所以,建议是使用简单的算术操作数,因为BETWEEN结束日期有问题.

有没有BETWEEN更好的背景<=>=

sql t-sql sql-server

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

Convert.ToDateTime(D)与(DateTime)D相比较

如果我有一个值D并且想要确保它是类型datetime那么下面是否有区别?

  1. DateTime dtm = Convert.ToDateTime(D)
  2. DateTime dtm = (DateTime)D

1是转换而2是转换?(我认为在某些方面2是较轻的操作?)
我什么时候应该使用1而不是2?


编辑

(问题的背景)

D来自a中的一个单元格DataTable.我正在做的是找到任何日期(通过datatable.columnname)的单元格,然后将ToOADate函数应用于结果,然后再将其移动到xl.所以,如果dr是我的DataRowView话,我有以下任何一种选择:

//Convert
DateTime dtm;
dtm = Convert.ToDateTime(dr[i - 1]);
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate();

//Cast
DateTime dtm;
dtm = (DateTime)dr[i - 1];
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate();
Run Code Online (Sandbox Code Playgroud)

c#

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

写/保存/:在gVim中是相同的

在Gvim中,我有以下文件菜单:

在此输入图像描述

保存旁边说:w.

最近我被告知:w不是保存但是写的.

为什么菜单设置如下,write/ Save/ 之间有什么区别:w

vim

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

根据FileType自动更改colorscheme

我读过这个问题

我还执行了以下帮助主题:
:h BufEnter
:h BufNewFile
:h BufLeave

......但仍然 - 我有以下内容vimrc- 它是如何工作的?

colo pyte
autocmd! BufEnter,BufNewFile *.sql colo Zenesque
autocmd! BufLeave  *.sql colo pyte
Run Code Online (Sandbox Code Playgroud)

如果我打开一个.sql文件,我假设它正在执行BufNewFile,因此应用颜色方案Zenesque?如果我然后离开那个缓冲区并将光标放在vimrc的缓冲区中,那么肯定该BufLeave行将执行但是哪个缓冲区应用了pyte,为什么我指定.sql旁边BufLeave

vim

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

如果可用,为什么处理器不使用聚簇索引扫描

所以我在用户表上有这个结构:

在此输入图像描述

但是,如果我运行以下代码:

select count(*) 
from WH.dbo.tb_DimUserAccount
Run Code Online (Sandbox Code Playgroud)

它似乎适用于非唯一非聚集索引ix_DimUserAccount_UserType:

在此输入图像描述

这是索引扫描:

在此输入图像描述

为什么不去扫描ix_DimUserAccount_Unique?我应该改变我的代码以某种方式使用不同的索引吗?

sql sql-server indexing performance

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