我们仓库中无处不在的两个最重要的字段是UserAccountKey和DateKey.
这些是正确的数据类型吗?
WH是在2006年创建的,所以类型Date不是一个选项,虽然我们现在正在运行,2008-R2所以它现在是WH的下一次迭代的选项.这是一个完善的WH,它有多个立方体和一个完整的报告系统.上面的另外一个问题是,在创建WH时,架构师是否更好地将DateKey作为类型Char(8)而不是INT?
我有以下代码,它连接到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) 这些都一样吗?
public void MyMethod() {do something}
public MyMethod() {do something}
void意味着什么也不返回 - 所以留下这个关键词也意味着什么都不返回?如果是这种情况那么为什么这个词存在于语言中 - 是否在其他情况下使用?
我有这个调用方法:
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',这是未提供的.
规格为存储过程是:
要选择并返回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) 要正确使用索引,必须将过滤谓词设置为搜索参数,因此DATETIME在这种情况下不能使用函数.
您需要使用<=和>=操作数进行日期和时间比较,但也有BETWEEN条款.
所以,建议是使用简单的算术操作数,因为BETWEEN结束日期有问题.
有没有BETWEEN更好的背景<=和>=?
如果我有一个值D并且想要确保它是类型datetime那么下面是否有区别?
DateTime dtm = Convert.ToDateTime(D)DateTime dtm = (DateTime)D1是转换而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) 在Gvim中,我有以下文件菜单:

保存旁边说:w.
最近我被告知:w不是保存但是写的.
为什么菜单设置如下,write/ Save/ 之间有什么区别:w?
我读过这个问题
我还执行了以下帮助主题:
: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?
所以我在用户表上有这个结构:

但是,如果我运行以下代码:
select count(*)
from WH.dbo.tb_DimUserAccount
Run Code Online (Sandbox Code Playgroud)
它似乎适用于非唯一非聚集索引ix_DimUserAccount_UserType:

这是索引扫描:

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