小编ben*_*ear的帖子

SQL Server可以发送Web请求吗?

我在本地网络上有一个SQL Server数据库和一个Intranet Web应用程序.Intranet Web应用程序创建记录并将它们发送到数据库.我有一个Internet Web应用程序,我想在本地网络上使用SQL Server数据库发送新记录.

我无法出于各种原因更改/修改Intranet Web应用程序,因此我唯一的选择是在本地SQL Server上创建一个触发器,该触发器将使用某种http post请求或url调用将新记录发送到Internet Web应用程序.

INTERNET Web应用程序设置有RESTful api,可以通过表单发布到公共可访问的URL(例如http://www.example.com/records/new)接收新记录.

有没有人知道如果通过URL发送数据(xml,json,纯文本变量)可以在SQL Server中完成?

谢谢你的任何想法!

sql t-sql sql-server sql-server-2005

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

授予对另一个数据库的用户/角色的访问权限

简短版本:我可以向外部数据库授予对角色的访问权限吗?

长版:

我正在处理使用Crystal的报告,它正在从应用程序SQL Server实例(database1)中检索数据.

应用程序正在运行报告并覆盖报告中的连接,我无法访问应用程序代码.

我已经向服务器添加了一个新的数据库(database2),它正在从电话交换机收集信息,我想将这些信息加入到应用程序数据(database1)中.

我可以在设计器中运行时加入数据和报告(以SA身份登录),但是当报告通过应用程序从外部运行时,它们会因相当一般的错误而失败(无法检索数据).

我假设错误是由新的数据库权限引起的,就像我以SA身份登录应用程序时错误消失了.

对于运行报表的用户,应用程序具有特殊的数据库角色,在向应用程序db(database1)添加表/视图/ sp时,我可以简单地向此角色授予select/execute以允许报表访问对象.

现在我在不同的数据库中有对象,但是角色不容易访问.

有什么方法可以database2通过现有角色引用第二个db()吗?

例如:

USE [database1]
GRANT EXECUTE ON [database2].[dbo].[CUSTOM_PROCEDURE] TO [applicationrole1] 

OR

USE [database2]
GRANT EXECUTE ON [dbo].[CUSTOM_PROCEDURE] TO [database1].[dbo].[applicationrole1]
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够以某种方式链接到角色而不是重新创建新角色,因为在添加/配置新用户时,应用程序会定期更新角色.

(未标记为Crystal-Reports,因为这与问题无关)

编辑:

有什么方法可以做以下事情:

INSERT INTO Database2.sys.database_principals
SELECT * FROM Database1.sys.database_principals
WHERE [type] = 'S'
Run Code Online (Sandbox Code Playgroud)

要复制用户(不是登录),然后添加角色成员?

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

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

GUID vs Identity用于标记

我知道这个主题已经详细讨论了(我在这里和网上都阅读过很多帖子)而且我不喜欢鞭打死马,但我对整数ID与GUID的更具体方面有疑问:

我正在编写一个模式,它将具有与stackoverflow标签类似的标记功能,但它将使用相同的标签对5个不同的表使用.

我要链接的基本表格如下:

标签表

Tag ID    Tag Name      Tag Description
-------------------------------------------------------------
     1    Hats          Tag for hats
     2    Coats         Tag for coats
     3    Gloves        Gloves tag
     4    Ladies        Ladies item
Run Code Online (Sandbox Code Playgroud)

项目表1

Item ID    Item Name    Cost
------------------------------------------------------------
      1    Deerstalker  £20.00
      2    Fedora       £50.00
      3    Scarf        £15.00
Run Code Online (Sandbox Code Playgroud)

我遇到麻烦的是tag_item桌子.

我将有5个具有完全不同结构的表,我希望用户能够应用标签,所以我想我需要执行以下操作之一:

  • 存储table name/ table number以及标记所涉及的行的整数键
  • 存储GUID一行,这将独立于表格工作,使得获取某一行的所有标记变得更加容易.

我不确定的是这将如何影响以下方面的表现:

  • 使用特定标记/标记搜索5个表中的所有项目
  • 编辑项目的标签
  • 加入

在这种情况下是否有任何明显更好的选择,或者我可以阅读这个特定情况下的优势?


编辑:

对于任何感兴趣的人,下面是我决定的架构:

标签表

CREATE TABLE [dbo].[Sys_TagList](

    [Sys_Tag_Primary] [int] IDENTITY(1,1) NOT NULL,
    [Sys_Tag_Name] [varchar](50) NOT NULL,
    [Sys_Tag_Description] …
Run Code Online (Sandbox Code Playgroud)

t-sql tags sql-server-2008

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

使用OUTPUT子句插入不在INSERTED中的值

我正在编写一个存储过程来处理属于应用程序的表,并将值插入属于同一应用程序的表中(因此我无法修改任何一个表).

我必须只处理新记录并记住已经处理了哪些记录,为此我创建了第三个简单表.

表格如下,删除了许多列以仅留下重​​要细节.

来源表

CREATE TABLE [dbo].[DETAIL](
    [DET_NET] [float] NULL,
    [DET_VAT] [float] NULL,
    [DET_VATCODE] [varchar](4) NULL,
    [DET_GROSS] [float] NULL,
    [DET_DATE] [datetime] NULL,
    [DET_PRIMARY] [float] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

目标表

CREATE TABLE [dbo].[TRN_TEMP](
    [TRN_TRAN_DATE] [datetime] NULL,
    [TRN_DESCRIPTION] [varchar](20) NULL,
    [TRN_PRIMARY] [int] NULL,
    [TRN_AMT] [float] NULL
)
Run Code Online (Sandbox Code Playgroud)

跟踪表

CREATE TABLE REGISTER(
    LINE_ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL,
    DET_PRIMARY_LINK FLOAT NOT NULL,
    INS_DATE DATETIME NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我试图从源表插入Target表值,但也将源表的主键插入到跟踪表中.

INSERT INTO TRN_TEMP (TRN_TRAN_DATE, TRN_DESCRIPTION, TRN_AMT)
OUTPUT D.DET_PRIMARY, GETDATE() INTO REGISTER (DET_PRIMARY_LINK, INS_DATE)
SELECT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

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

选择超过总值百分比的行子集

我有一张桌子,其客户,用户和收入类似于以下(实际上有数千条记录):

Customer   User    Revenue
001        James   500
002        James   750
003        James   450
004        Sarah   100
005        Sarah   500
006        Sarah   150
007        Sarah   600
008        James   150
009        James   100
Run Code Online (Sandbox Code Playgroud)

我想要做的只是返回占用户总收入80%的最高消费客户.

要手动执行此操作,我会根据收入对James的客户进行排序,计算总计百分比和运行总百分比,然后仅返回记录,直到达到运行总计达到80%:

Customer    User    Revenue     % of total  Running Total %
002         James   750         0.38        0.38 
001         James   500         0.26        0.64 
003         James   450         0.23        0.87  <- Greater than 80%, last record
008         James   150         0.08        0.95 
009         James   100         0.05        1.00 
Run Code Online (Sandbox Code Playgroud)

我尝试过使用CTE但到目前为止已经空白了.有没有办法通过单个查询而不是在Excel工作表中手动执行此操作?

sql t-sql sql-server running-total sql-server-2008

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

Mongoose 查询/模式错误仅在 docker 容器中

我有一个 MongoDB 数据库,我正在使用 Mongoose 进行查询。

我正在使用一个集合audits来存储有关更新更改、登录失败和错误的信息。

审计模式

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;
const Schema = mongoose.Schema;

const auditSchema = new Schema({
  ref: {
    type: String,
    required: true
  },
  linkedId: {
    type: Schema.ObjectId,
    refPath: 'ref'
  },
  action: {
    type: String,
    enum: ['insert', 'update', 'delete', 'special']
  },
  /* ... lots more fields */
});

module.exports = mongoose.model('audit', auditSchema);
Run Code Online (Sandbox Code Playgroud)

使用以下查询在我的 docker 容器中查询此集合:

return Audit.find().sort({date: -1})
  .skip(skipInt)
  .limit(limitInt)
  .populate('user')
  .populate('linkedId')
  .exec();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Schema hasn't been registered for model "error". Use …
Run Code Online (Sandbox Code Playgroud)

mongoose docker

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

调用jQuery html方法时出错

我正在进行javascript + jQuery的第一次尝试,设计一个简单的页面但遇到错误,我确定这是一些愚蠢的事情,但我已经多次查看代码并且无法发现它.

我收到的错误如下:

错误图片

整个代码如下(我已将动态'#' + elementname + 'perc'更改为字符串,我得到相同的错误),任何人都可以提供任何见解吗?

<DOCTYPE html>
<html>
    <head>
        <script src="js/jquery.js"></script>
        <!--<script src="js/dealercalc.js"></script>-->
        <script type="text/javascript">

$(document).ready(function(){
  $(".val-adjust").click(function(){
    var name = $(this).attr('name');
    var bit = $(this).attr('value');

    setvalue(name,bit);

    //discountbits['basic'] = false;
    //$("#basedisper").text(discountlist['basic']);
  });
  $("#basdisyes").click(function(){
    discountbits['basic'] = true;
    //$("#test1").html("<b>Hello world!</b>");
  });
  $("#btn3").click(function(){
    $("#test3").val(gettotal());
  });
}
);

function getpercbypurc(value){
    return 0;
};

function setvalue(elementname,yesno){
    discountbits[elementname] = yesno;
    if (yesno) {
        $("#basicperc").hmtl(discountlist[elementname] + "%");
    } else {
        $('#' + elementname + 'perc').hmtl("0%");
    }
};

function gettotal() {
    var total …
Run Code Online (Sandbox Code Playgroud)

html javascript jquery jquery-selectors

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

如何从express.static检测404错误

我用来express.static提供静态文件,如下所示:

['/images','/packages','/scripts','/stylesheets'].forEach(p => {
  app.use(p, express.static(siteSettings.publicFolder + p));
});
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但是当请求不存在的文件时,express 会按预期引发错误,但这会击中我的自定义错误包罗万象的路线:

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'production' ? {} : err;

  // render the error page
  res.status(err.status || 500);
  res.render('views/error');
});
Run Code Online (Sandbox Code Playgroud)

这意味着文件 404 错误(例如图像文件)正在向客户端返回完整的错误文档 (26kb),这似乎是一个坏主意。

有什么方法可以发现express.static 导致了错误吗?

我想过做类似的事情:

if (req.path.indexOf("/images") === 0){
    res.send('Not found');
} else {
    res.render('views/error');
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找类似的东西:

if (req.errorFromStatic){
    res.send('Not found');
} else {
    res.render('views/error');
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

node.js express

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

每行使用两次相同的GUID

我正在构建一个应用程序,通过ftp和XML文件将数据从SQL服务器传输到非现场位置.

我正在通过查询为每个文件构建XML数据FOR XML PATH('path'), TYPE.

我将使用a GUID生成文件名以及用作文件中的标识符,目前我的SQL获取表如下(简化):

SELECT LVL1.inv_account_no
     , LVL1.cus_postcode
     , CONVERT(varchar(255),NEWID()) + '.xml' as FileName
     , (SELECT (SELECT CONVERT(varchar(255),NEWID()) FOR XML PATH('ident'), TYPE),  (

                SELECT.... [rest of very long nested select code for generating XML]
Run Code Online (Sandbox Code Playgroud)

SQL小提琴示例

这给了我:

Account Postcode  FileName                              xCol
AD0001  B30 3HX   2DF21466-2DA3-4D62-8B9B-FC3DF7BD1A00  <ident>656700EA-8FD5-4936-8172-0135DC49D200</ident>
AS0010  NN12 8TN  58339997-8271-4D8C-9C55-403DE98F06BE  <ident>78F8078B-629E-4906-9C6B-2AE21782DC1D</ident>
Run Code Online (Sandbox Code Playgroud)

每行/使用的基本不同的GUID NEWID().

有没有办法可以在不增加游标或进行两次更新的情况下将相同的GUID插入到两列中?

xml sql-server guid sql-server-2008

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

LINQ更新大量记录的最快方式(> 2m)

我有这个循环:

using(var db = new MainContext())
{
    var q = db.tblInternalURLs;
    foreach (var rec in q)
    {
        db.ExecuteCommand("UPDATE tblInternalURLS SET hash = '" + LoginAPI.GetSha1(rec.URL) + "' WHERE ID = " + rec.ID);
    }
}
Run Code Online (Sandbox Code Playgroud)

转换更新查询db.ExecuteCommand已大大提高了速度,但我想知道是否有更快的方法来执行这些查询,因为它仍然需要很长时间超过2,000,000条记录.我相信很多开销都在最初的LINQ查询中.它是否正确?

c# sql linq asp.net

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