标签: sql-server-2008

多个发起者将使用的服务代理程序开始对话对话..如何将参数传递给它

开始对话的标准格式是这样的:

Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
   FROM SERVICE initiator_1
   TO SERVICE 'target_1'
   ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)

但是我想创建一个灵活的通用过程,它可以从多个启动器服务中的任何一个发送特定对话(假设我有 10 个使用相同存储过程的潜在启动器服务)。

Create Procedure SendJoinRequest (@initiatorServiceName varchar)
AS
   Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
   FROM SERVICE @initiatorServiceName
   TO SERVICE 'target_1'
   ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)

我想这行不通,因为服务的标识符在

FROM SERVICE @initiatorServiceName 
Run Code Online (Sandbox Code Playgroud)

实际上不能是字符串,而必须是服务的实际名称...是否有一种简单的方法可以将其作为参数传递?或者我是否必须将所有这些嵌套在一个令人讨厌的串联字符串执行中?

@String = blahblah + blah blah + escapecharacters + blah
execute(@String)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

sql-server-2008 sql-server service-broker

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

在 SQL Server 中还原数据库时出现问题

我正在尝试按照以下帖子中的说明进行操作:

/sf/ask/720986801/

总结; 我正在构建逻辑文件列表然后恢复数据库:

RESTORE FILELISTONLY
FROM DISK = 'C:\KeltieCochrane_v220120220.BAK';

RESTORE DATABASE KeltieCochrane_v2 
FROM DISK = 'C:\KeltieCochrane_v220120220.BAK'
WITH 
    MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\...\KeltieCochrane_v2.mdf',
    MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\...\KeltieCochrane_v2_1.ldf';
Run Code Online (Sandbox Code Playgroud)

我没有.MDF.LDF在目标文件夹中,并且知道它们包含在.BAK备份文件中。

当我将数据库恢复到一个空的新数据库时,它指出:

The backup set holds a backup of a database other than the existing 'KCDB'.

当我尝试使用脚本 (KeltieCochrane_v2) 中的实际数据库名称进行恢复时,我得到 There are conflicting file locations specified for the file.

如果我尝试简单地恢复数据库,我会收到一个标准的 15105 错误并且操作系统无法获取此错误的文本。

我究竟做错了什么?

sql-server-2008 sql-server restore

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

无法从链接服务器 X 的 OLE DB 提供程序“SQLNCLI”获取行集

我在通过链接服务器从同一个表进行并发读取时收到此错误。超时设置没问题。发生此错误时,我也开始收到相同查询的以下错误:

“事务(进程 ID X)在锁定资源上与另一个进程发生死锁,并已被选为死锁受害者。重新运行事务..”

这是否意味着可以通过链接服务器执行的读取数量有限制?如果是这样,限制是多少?或者这可能是因为其他原因吗?

此外,使用的查询如下:

SELECT  T.Col1, T.Col2, T.Col3, PG.Col1, PG.Col2, PG.Col3
INTO #TMP_OUTPUT 
FROM  linkedserver1.db1.dbo.table1 T WITH (NOLOCK)
      INNER JOIN #temp2 PG 
      ON T.Col1 = PG.Col1
WHERE T.Col3 = somevalue
Run Code Online (Sandbox Code Playgroud)

谢谢,卡努

sql-server-2008 sql-server deadlock linked-server

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

EXECUTE AS 似乎没有改变安全上下文

我们有仍然使用 xp_cmdshell 调用的遗留代码。当我们迁移到 SQL Server 2008 时,我们创建了一个使用以下模式代码的存储过程:

EXECUTE AS 'DOMAIN\ID2'
EXEC master..xp_cmdshell @command
REVERT
Run Code Online (Sandbox Code Playgroud)

当我将 WHOAMI 作为命令传递时,它显示的不是“DOMAIN\ID2”,而是运行 SQL Server 的服务帐户的 ID(即“DOMAIN\ID1”)。它不应该返回 'DOMAIN\ID2',因为它应该在不同的安全上下文下运行吗?如果是这样,知道为什么它不会改变上下文吗?这个过程是由另一个现在早已不复存在的开发人员创建的,我对安全性和模拟并不像我应该的那样熟悉。

sql-server-2008

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

SQL Server 2008 查询保存在日志中?

每次我创建查询并运行它以创建报告时,我都会将查询保存在我的 Projects 文件夹中,以防将来我必须重新运行查询或者由于任何原因必须修改它,但似乎出于某种原因我在六月中旬的某个时候运行的查询没有保存。我需要查看我在查询中使用的代码,因为我正在查看报告,但有些数字看起来不正确,因此我需要检查查询以查看代码中是否存在错误编写的内容。

无论如何,在某些日志中,我是否可以在 6 月份看到我运行(但未保存)的查询的代码?如果可以的话,这将是惊人的。谢谢!

sql-server-2008 query transaction-log

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

数据库如何决定使用哪个Index

数据线

create table t
(
    id int,
    id1 int
)

create index Example_Index
  On t(id,id1)

create index Example1_Index
  On t(id1,id)
Run Code Online (Sandbox Code Playgroud)

数据管理语言

insert into t(id, id1)values(1, 100)
insert into t(id, id1)values(1, 101)
insert into t(id, id1)values(2, 103)
insert into t(id, id1)values(1, 104)
insert into t(id, id1)values(3, 105)
insert into t(id, id1)values(1, 106)
insert into t(id, id1)values(2, 107)
insert into t(id, id1)values(3, 108)
Run Code Online (Sandbox Code Playgroud)

SQL查询- select * from t Where id = 107 -用途Example_Index

SQL查询- select * from t Where …

performance index sql-server-2005 sql-server-2008 sql-server query-performance

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

在 SQL Server 2008 中截断后在批量插入中重复主键?

我正在使用 SSIS 将数据从我的 SQL Server 2008 prod 数据库转储到平面文件,然后使用批量插入将这些平面文件加载到 SQL Server 2008 dev 数据库中。SSIS 包在批量插入之前运行 TRUNCATE TABLE 语句,但是当我运行它时,我仍然收到此错误:“语句已终止。违反 PRIMARY KEY 约束。无法插入重复键。” 为什么截断后会有重复的键?在批量插入之前,我还需要做些什么来清除主键?

sql-server-2008 ssis bulkcopy

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

没有函数的交叉应用

我想在我的生产数据库之一上运行与此非常相似的查询:

-- Setup the table (Already there in my real scenario)
create table dbo.MyTable(MyValue int, MyGroup varchar(5))
insert into dbo.MyTable values
(56,'I'), (12,'I'), (56, 'II'), (12, 'II'), (56, 'III'), (56, 'IV'), (56, 'V'), (12, 'V')

-- Create a function to cross apply with (I can't make this in my production env)
create function dbo.GetOrderGroup(@groupName varchar(15))
returns @ReturnTable table(GroupValue varchar(8000), GroupName varchar(15))
as                
begin
    DECLARE @groupValue VARCHAR(8000)

    SELECT @groupValue = COALESCE(@groupValue + ', ' 
           + cast(MyValue as VARCHAR(10)), cast(MyValue as VARCHAR(10))) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server cross-apply

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

SQL Server 2008 SP1 到 SQL Server 2008 R2 升级

我们的一个项目计划从 SQL Server 2008 SP1 升级到 SQL Server 2008 R2。我想从这个社区知道关于以下方面的建议:

  1. 迁移数据是否需要任何配置或任何更改?

  2. 我们有一些 SSIS 包,所以这次升级需要更改任何代码吗?

  3. 我们应该用来完成这项工作的任何其他建议或最佳实践。

  4. 应该采取什么方法?

sql-server-2008 ssis sql-server-2008-r2 upgrade

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

为什么我们必须在表分区中使用 SWITCH?

我是 SQL 的初学者。

我想知道SWITCH表分区的重要性是什么?

我创建了一个按月分区的表,总共有 12 个分区。

范围是:

'2012-01-31 23:59:59.000', 
'2012-02-29 23:59:59.000', 
'2012-03-31 23:59:59.000', 
'2012-04-30 23:59:59.000', 
'2012-05-31 23:59:59.000', 
'2012-06-30 23:59:59.000', 
'2012-07-31 23:59:59.000', 
'2012-08-31 23:59:59.000', 
'2012-09-30 23:59:59.000', 
'2012-10-31 23:59:59.000', 
'2012-11-30 23:59:59.000', 
'2012-12-31 23:59:59.000'
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server-2008 sql-server partitioning

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