标签: sql-server

是否可以隐式而不是显式地引用链接服务器?

我正在使用引用链接服务器的视图和存储过程:

SELECT Id, Name
FROM [LinkedServer].Database.dbo.FooView
Run Code Online (Sandbox Code Playgroud)

我想隐藏[LinkedServer].Database或至少隐藏[LinkedServer]我的视图和存储过程的一部分。这样我就可以拥有“与服务器无关”的代码,可以很容易地在生产服务器和开发服务器之间进行比较。

这可以在服务器级别(如链接服务器)或数据库级别(使用它的视图和存储过程)完成。

sql-server linked-server

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

当我告诉光标时,它不打印文本

WAITFOR在以下脚本中与游标结合使用:

create table orders(orderId int primary key,productId int,productName varchar(20));

insert into orders values(1,11,'book');
insert into orders values(2,13,'flower');
insert into orders values(3,24,'microwave');
insert into orders values(4,7,'food');
insert into orders values(5,46,'clothes');

declare cur cursor for   
select * from orders;
open cur;
fetch next from cur;
while(@@fetch_status=0)
begin
    waitfor delay '00:00:01';
    fetch next from cur;
end;
close cur;
deallocate cur;
Run Code Online (Sandbox Code Playgroud)

我希望每 1 秒的指定间隔显示来自光标的一条记录。例如:显示第一行,然后等待一秒钟;显示第二行,然后稍等;等等。上面的光标不会这样做。说orders有 5 行。该WHILE块等待 5 秒钟,然后一起显示所有记录。

这是游标的错吗?如何修改此脚本以按预期工作?

sql-server-2008 sql-server cursors

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

关于在系统数据库上创建用户对象的建议

我想在 SQL Server 上使用 Service Broker 为我们的生产数据库设置一堆事件通知。

我在我的测试机器上设置了一个新数据库,一切正常。问题是我宁愿不必为此通知目的部署整个数据库,而且我不能使用一个已经到位的用户数据库(无论如何,这将是一团糟)。

如果可能,我最好将通知对象部署在 上master,但首先我想确定这实际上是一个好主意(如果确实如此)。

网上书籍

不要在 master 中创建用户对象。如果这样做,必须更频繁地备份 master。

Books Online建议我不要在master. 此外,我们已经master经常备份我们的数据库。

master在这种情况下,我应该使用数据库还是其他东西?

master在设置之前,我应该了解数据库、服务代理或事件通知吗?

sql-server-2005 sql-server sql-server-2008-r2 service-broker event-notification

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

在 sql 中管理选择结果

我们需要操作从选择查询返回的一组记录。这可以在:

  1. 通过将整个记录保存到表变量中,然后执行所需的过程。
  2. 我们可以这样做

    Select * from
       (select * from table where conditions) AS results
       where results.RowNum between ....
    
    Run Code Online (Sandbox Code Playgroud)

    那么在这种情况下最好的方法是什么..使用表变量或第二种方法。与第一种方法相比,使用第二种方法是否存在任何性能问题?

sql-server select

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

Sql Server 资源调控器 - 跟踪 IO

我知道我可以使用性能计数器来跟踪资源调控器 CPU 和内存使用情况。是否可以跟踪每个工作负载组的 I/O 使用情况?我没有看到任何具体的或任何推荐的做法。

performance sql-server

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

SQL Server 中未提交的 JDBC 读取

如果我将 jdbc 隔离级别设置为在 SQL Server 中读取未提交,SQL Server 会锁定任何表、页、行等吗?

谢谢。

sql-server locking

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

从生产数据库(不同的机器和服务器)创建一个测试数据库

我想在单独的服务器上设置一个测试数据库。生产数据库是 MS SQL Server,测试服务器是 *nix 机器,所以我想让测试服务器运行 PostgreSQL 或 MySQL。

数据集非常大;有些表有 30k+ 行,并且有很多表。

一些表根本没有太大变化,并且出于测试目的,许多表可以是空的,因此理想情况下,某种可以从数据库复制部分但不是全部记录的解决方案将是理想的。

除此之外,我可能只是在同一台服务器上制作生产数据库的测试副本,而不是将测试数据库服务器放在开发服务器上。假设测试数据库上的负载相对较小,在与生产服务器相同的服务器上托管测试数据库是否存在潜在问题?

如果我从生产环境复制 - > 在 MS SQL Server 中进行测试,是否可以设置某种自动化脚本来选择性地仅复制某些记录(例如,仅某些表中的最后 1k 行,而其他表中没有,以及选定的几行中的所有行)?有没有办法将其设置为选择性备份,然后使用该备份生成测试数据库?

附加信息

这里测试的只是代码,而不是数据库,甚至不是数据库的接口。代码 (Django) 使用 ORM,因此使用哪个 RDBMS 并不重要。我很乐意假设,如果我调用.save()它,无论数据库如何,它都可以工作;我担心的是我是否正确设置了表单、实用程序函数、数据导入等,所有这些都是通过 Django 的关系模型系统抽象出来的,该系统已被证明对 RDBMS 完全无动于衷(实际上,在一个的生产版本中)我的网站同时从 MySQL 和 SQL Server 数据库中提取(一个包含旧数据)。

mysql postgresql sql-server testing backup

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

将数据从一个数据库中的自定义架构移动到新数据库中的默认架构需要哪些步骤

为了便于论证,让我们假设我在单个 SQL Server 数据库中有以下表。

mySchema.Users
mySchema.Products
-- 
secondSchema.Users
secondSchema.Contracts
secondSchema.ContractItems
--
oldSchema.People
oldSchema.Table1
oldSchema.Table2
oldSchema.Table3
oldSchema.Table4
-- 
and so on and so forth
Run Code Online (Sandbox Code Playgroud)

每个“模式”都完全独立于其他“模式”。它们位于单个数据库中的唯一原因是托管和成本限制。在一个完美的世界中,这些本来应该在单独的数据库中。

当(如果有的话)我需要将 secondSchema 移动到一个新数据库时,我需要做什么,这完全是因为它的使用量增加了,现在需要将它存放在自己的数据库中。


我已经查看了关于何时使用非 dbo 模式与新数据库的决策标准,正如我上面所说的,它们在同一个数据库中没有关系或事务的理由。他们在那里是出于成本原因。

schema sql-server

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

我的设置的硬盘配置

我有一个相当大的事务数据库 (100GB),有很多用户。数据库访问完全通过存储过程进行,这些过程大量使用临时表、表变量、游标和其他有趣的东西。

我正在一个新盒子上试用它以提高性能。新盒子有 5 个独立的物理硬盘。我正在努力想出一个最佳设置(主要是虽然无知,但我通常是 ac# dev)。到目前为止,我得到了以下信息:

Drive C: OS, SQL install, TempDB log
Drive D: Database data
Drive E: Database log
Drive F: TempDB data
Drive G: Databases indexes
Run Code Online (Sandbox Code Playgroud)

我走的是正确的道路吗?有什么明显的错误吗?

performance sql-server-2005 sql-server hardware

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

返回完整记录集的百分比

我正在拉回订单列表,但我只需要显示一定比例的记录。例如,我们想要前 30 名或前 50 名。百分比是可变的,所以我不想使用 TOP。我尝试了下面的代码,但没有返回任何记录。

SELECT x.SelectionCriteriaID, 
       x.DeliveryCriteriaID, 
       x.SurveyID, 
       x.intappid, 
       x.intcustomerID, 
       x.intorderid, 
       x.RowNumber RowNumber,
       x.cntoid
  FROM (SELECT @SelectionCriteriaID SelectionCriteriaID, 
               @DeliveryCriteriaID DeliveryCriteriaID, 
               @SurveyID SurveyID, 
               ord.intappid, 
               ord.intcustomerID, 
               ord.intorderid, 
               ord.cntoid,
               ROW_NUMBER() OVER (ORDER BY ord.intcustomerid) AS RowNumber
          FROM ord
         WHERE ord.cntoid >= ISNULL(@MinNumberOrders, 1)
           AND ord.cntoid < ISNULL(@MaxNumberOrders, 999999999))x
 GROUP BY x.SelectionCriteriaID, x.DeliveryCriteriaID, x.SurveyID, x.intappid, x.intcustomerID, x.intorderid, x.RowNumber, x.cntoid
 HAVING x.rownumber < MAX(x.RowNumber)/(100/@percent)
Run Code Online (Sandbox Code Playgroud)

sql-server query t-sql sql-server-2008-r2

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