标签: sql-server-2008

如何在不同的数据库中创建触发器?

是否可以创建一个存储过程,在与存储过程本身所在的数据库不同的数据库中创建表触发器 (DDL) 。数据库位于同一服务器实例上。如果是,那么如何?

例如,这不起作用:

create PROCEDURE [dbo].[CreateTriggrer]
  @db varchar(60)
AS
BEGIN
  SET NOCOUNT ON;   
  declare @statement nvarchar(max) = N'CREATE TRIGGER [dbo].[TestTrigger]
   ON  [$database$].[dbo].[TestTable] 
   AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
  PRINT ''test''
END'

    set @statement = REPLACE(@statement,'$database$',@db)
    EXEC dbo.sp_executesql @statement = @statement

END
Run Code Online (Sandbox Code Playgroud)

当这样调用时:

EXEC [dbo].[CreateTriggrer] @db = N'TestDatabase'
Run Code Online (Sandbox Code Playgroud)

它返回此错误:

消息 2108,级别 15,状态 1,过程 TestTrigger,第 6 行
无法在“TestDatabase.dbo.TestTable”上创建触发器,因为目标不在当前数据库中。

这是公平的。有没有办法实现我想要的?

sql-server-2008 sql-server

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

需要为用户配置什么服务器角色才能启用 sql server 代理

我在 SQL SERVER 2008 上,

我想为特定用户启用 SQL 代理,该用户只有对数据库的读取访问权限。我不想给 sysadmin 角色?

有什么办法,我可以做到吗?

sql-server-2008 sql-server sql-server-agent users

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

SQL Server 2008 将字符串转换为日期时间问题

我在表中有一个字符串列,将数据显示为 "CXL P/D 08/15/13"

我正在尝试将此列转换为日期时间,但我无法弄清楚如何仅提取日期并更改数据类型。

Cast(RIGHT(RTRIM(Trade_Date) ,8)as datetime) 我正在尝试这个声明,但它不起作用

从字符串转换日期和/或时间时转换失败。

谢谢

sql-server-2008 sql-server

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

链接的 SQL Server

我正在尝试链接 2 个 SQL Server(2008 和 2005)。我已经通过 GUI 和脚本尝试过它,但没有运气。我在尝试通过访问进行查询时遇到问题。由于我不是网络管理员,我正在努力研究如何在这方面取得成功,但我总是收到一条消息,告诉我用户“../匿名登录”不允许连接。

经过一些研究,我相信这是一个与 Kerberos 相关的问题,它没有将我的凭据传输到我尝试链接的机器上。我正在使用 NT 身份验证,我无法使用/创建 SQL 身份验证登录。

我已经给我的网络管理员发送了一封邮件,看看我们是否能够在这里使用 Kerberos 委派。

找出我的配置发生了什么以及为什么这不起作用的后续步骤是什么?

提前致谢,因为这是我的第一个问题,大家好!

sql-server-2005 sql-server-2008 distributed-databases kerberos

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

Microsoft SQL Server 无法启动

我在启动 SQL Server 2008 时遇到问题。我需要将数据库从一台计算机复制到 seced。我只DATA从我实际工作的服务器复制目录,然后将此目录复制到我新安装的 SQL Server 2008。在此之后,当我启动 SQL Server 时,它不会启动。

我的错误日志是:

2014-01-02 11:54:18.02 Server      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) 
    Jul  9 2008 14:17:44 
    Copyright (c) 1988-2008 Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

2014-01-02 11:54:18.02 Server      (c) 2005 Microsoft Corporation.
2014-01-02 11:54:18.02 Server      All rights reserved.
2014-01-02 11:54:18.02 Server      Server process ID is 6684.
2014-01-02 11:54:18.02 Server      System Manufacturer: 'Hewlett-Packard', System Model: 'HP ENVY Sleekbook 4 PC'. …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server-2008-r2 startup

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

为什么查询优化器不使用负过滤索引

我有一张具有以下结构的表,如您所见,有一个聚集索引和两个非聚集索引,一个非聚集索引是 IX_ParentId_Include,另一个是 FLIX_ParentId_Include

除了第二个索引被过滤之外,它们是相同的。

CREATE TABLE [dbo].[PhotoRepo] (
    [PhotoRepoId]              INT            IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL,
    [TypeId]                   TINYINT        NULL,
    [ParentId]                 INT            NULL,
    [RemoteLocation]           VARCHAR (4000) NOT NULL,
    [UploadedAt]               DATETIME       NOT NULL,
    [UploadedBy]               VARCHAR (255)  NULL,
    [FileSize]                 INT            NOT NULL,
    [DefaultChild]             BIT            NOT NULL,
    [RemoteLocationUploadedAt] DATETIME       NULL,
    CONSTRAINT [PK_FileList] PRIMARY KEY NONCLUSTERED ([PhotoRepoId] ASC)
);


GO
CREATE CLUSTERED INDEX [IX_PhotoRepoId]
    ON [dbo].[PhotoRepo]([PhotoRepoId] ASC);


GO


CREATE NONCLUSTERED INDEX [IX_ParentId_Include]
    ON [dbo].[PhotoRepo]([ParentId] ASC)
    INCLUDE([RemoteLocation], [DefaultChild], [TypeId]);
GO

CREATE NONCLUSTERED INDEX [FLIX_ParentId_Include] …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server optimization query-performance

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

在 SQL Server 中进行备份时出错

前几个月的 SQL 盒已经崩溃。我们几乎已经恢复了一些工具并在其上顺利运行应用程序的数据库。但是当我当时尝试备份数据库时,它给出了如下错误,

传递给数据库“****”中的日志扫描的日志扫描编号 (3533468:412:0) 无效。此错误可能表示数据损坏或日志文件 (.ldf) 与数据文件 (.mdf) 不匹配。如果在复制期间发生此错误,请重新创建发布。否则,如果问题导致启动失败,请从备份中恢复。(Microsoft SQL Server,错误:9003)

有人会帮助我摆脱这种情况吗?

我什至尝试复制数据库,但我失败了。

提前致谢。

sql-server-2008 sql-server corruption

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

如何为所有标识列重新设定种子?

禁用约束后,我删除了 20 个表中的所有行,使用存储的 proc SP_MsForEachTable 触发。现在在导入之前,我需要重新设置所有标识列以从 1 开始自动编号。

所以我创建了一个存储过程,将表名作为参数传递,因为这似乎需要时间单独执行,是否有另一种方法可以一次对所有表执行此操作?

   CREATE PROCEDURE [dbo].[USP_ReseedID]
@table_name varchar(50)
AS
BEGIN
    DBCC CHECKIDENT ( @table_name, RESEED, 0)

END  
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server sql-server-2008-r2 identity ddl

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

在列中拆分和复制字符串值的单一查询方法

这是我之前问题的一部分。

我有以下逻辑从表中的列中拆分字符串值tblProjects,如下所示:

SELECT  @Docs = Documents FROM tblProjects WHERE ID = @ID 
SET @Docs = @Docs + '$'
SET @pos = 0
SET @len = 0

WHILE CHARINDEX('$', @Docs, @pos + 1)>0
BEGIN
  SET @len = CHARINDEX('$', @Docs, @pos + 1) - @pos
  SET @value = SUBSTRING(@Docs, @pos, @len)

  IF CHARINDEX('|', @value) >0
  BEGIN
    SELECT  @type = SUBSTRING(@value, 1, CHARINDEX('|', @value) - 1),
            @name = SUBSTRING(@value, CHARINDEX('|', @value) + 1, 200)
    INSERT INTO tblDocuments VALUES(@ID, @value, …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server substring

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

AVG 函数返回错误的平均值

我有一个带有 REAL 类型列的简单表。

表中有 2 行,值分别为 0.23 和 0.24。如果我运行以下命令:

SELECT AVG(MyColumn) FROM dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

我希望得到 0.235 的结果,但实际上我得到 0.2349999901234。

有人可以告诉我为什么吗?

sql-server-2008 functions

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