标签: sql-server-2000

是否有一个"穷人"替代RedGate来编写整个数据库模式的脚本?

我处于这样一种情况,我将为数据库生成一个脚本,我可以在另一台服务器上运行并获得与原始数据库相同的数据库,但没有任何数据.实质上,我希望最终得到一个捕获数据库模式的大型创建脚本.

我在安装了SQL Server 2000的环境中工作,我无法安装2005客户端工具(如果他们有帮助).我负担不起RedGate,但我真的希望在另一台服务器上拥有一个具有相同架构的数据库.

有什么建议?任何简单的.exe(无需安装)工具,技巧或T-SQL技巧都将非常受欢迎.

更新:我正在使用的数据库有200多个表和几个外键关系和约束,因此手动编写每个表并将脚本粘贴在一起并不是一个可行的选择.我正在寻找比这个手动解决方案更好的东西

其他更新除非我完全遗漏了某些内容,否则这不是使用SQL 2000工具的可行解决方案.当我选择在数据库上生成创建脚本的选项时.我最终得到一个包含CREATE DATABASE命令的脚本,并且没有创建任何对象 - 表,约束等.SQL 2005的Management Studio也可以处理这些对象,但数据库处于没有对象的环境中我可以将Management Studio的安装连接到它.

sql-server sql-server-2000 sqltools

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

在SQL查询中执行正则表达式(替换)

&lt;在给定的数据库列中替换所有'<'的最佳方法是什么?基本上执行s/&lt[^;]/&lt;/gi

笔记:

  • 必须在MS SQL Server 2000中工作
  • 必须是可重复的(而不是最终&lt;;;;;;;;;;)

regex sql sql-server sql-server-2000

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

SQL Server 2000中"db_owner"和"拥有数据库的用户"有什么区别?

我试图更好地理解为什么我们的某个数据库更新脚本无法在特定客户站点上正常工作,并将其缩小(我认为)到数据库所有权和角色.

免责声明:我实际上正在等待客户DBA的回复,以便他们可以告诉我们他们最近是否升级了他们的SQL数据库,因此我们可以查看他们的数据库.我认为如果我们的应用程序的数据库登录转换为模式,SQL 2000到SQL 2005的转换可能会混淆我们的脚本,因为我们dbo在更新脚本中的几个地方引用.

无论如何,我一直试图找到更好的数据库所有权和角色的解释,以及当你没有在T-SQL语句中明确指定所有者时,它如何影响实际分配数据库对象的所有者.例如,我们的更新脚本通常只是CREATE TABLE foo代替CREATE TABLE dbo.foo或其他东西,但我发现了一些明确使用的dbo,这些是导致问题的那些(仅针对这一个客户).

我发现这篇文章(特定于SQL Server 2000),但该页面上的表格令人困惑.它提到db_owner并"拥有数据库"作为用户可以拥有的角色的两种不同的可能性.

例如,该表规定,如果一个用户sam,谁是谁的db_owner作用,运行查询CREATE TABLE [test3](abc int),将所拥有sam.

然后它提到如果另一个sue" 拥有数据库 "(sic)的用户运行相同的查询,它将归其所有dbo.

不会db_owner和"拥有数据库"是一回事吗?该表暗示"在db_owner角色中"和实际上"成为数据库的所有者" 之间存在差异.但是,如果那是真的,那么"拥有数据库"是什么意思,如果它不是作为db_owner角色的成员呢?

sql sql-server permissions sql-server-2000

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

查询代码速度极慢但SSMS速度快

我有一个相当简单的查询,我不断获得超时(它需要超过三分钟完成,我提前停止,所以我可以发布这个问题)在代码运行时,但是当我从同一台计算机运行相同的查询时在Sql Server Management Studio中,只有2532 ms在服务器上没有缓存数据和524 ms重复查询时,查询才会进行第一次查询.

这是我的c#代码

using (var conn = new SqlConnection("Data Source=backend.example.com;Connect Timeout=5;Initial Catalog=Logs;Persist Security Info=True;User ID=backendAPI;Password=Redacted"))
                using (var ada = new SqlDataAdapter(String.Format(@"
SELECT [PK_JOB],[CLIENT_ID],[STATUS],[LOG_NAME],dt 
FROM [ES_HISTORY] 
inner join [es_history_dt] on [PK_JOB] = [es_historyid] 
Where client_id = @clientID and dt > @dt and (job_type > 4 {0}) {1}
Order by dt desc"
     , where.ToString(), (cbShowOnlyFailed.Checked ? "and Status = 1" : "")), conn))
{
    ada.SelectCommand.Parameters.AddWithValue("@clientID", ClientID);
    ada.SelectCommand.Parameters.AddWithValue("@dt", dtpFilter.Value);
    //ada.SelectCommand.CommandTimeout = 60;
    conn.Open();
    Logs.Clear();
    ada.Fill(Logs); …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server sql-server-2000 .net-4.0

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

如何在CSV导入操作中一步创建和填充表格?

我正在寻找一种快速而又脏的方法将CSV文件导入SQL Server,而无需事先创建表并定义其列.

每个导入的CSV都将导入到自己的表中.

我们不关心数据类型推理.CSV的结构和布局各不相同,并且所有列都有很多列,但我们只关注其中的一些:街道地址和邮政编码.我们只想快速将CSV数据导入SQL数据库并提取相关列.

我想提供FieldTerminator和RowTerminator,将它指向CSV,并让实用程序完成其余工作.有没有办法创建表并使用BULK INSERT和/或OpenRowset(BULK ...)一步一步地填充它?

sql-server bulkinsert sql-server-2000 create-table openrowset

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

使用SQL Server 2000进行透视

我整理了一个关于我的问题的示例场景,我希望它足以让某人指出我正确的方向.

我有两张桌子

制品

替代文字

产品元

替代文字

我需要以下结果集

替代文字

sql t-sql sql-server sql-server-2000

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

什么原因导致"内部连接致命错误"

我在一台带有SQL 2000数据库后端的服务器上运行了许多ASP.Net网站(.Net v3.5).几个月来,我一直在接收看似随机的InvalidOperationExceptions,并显示消息"内部连接致命错误".有时间隔几天,而其他时间每天都有多处错误.

例外情况不仅限于一个站点,尽管它们共享业务和数据访问程序集.似乎总是从SqlClient.TdsParser.Run()抛出错误.它有时是从老式的直接SqlCommand.Execute()调用抛出的,而有时它是从Linq2Sql代码抛出的.

网络人员确信我们没有错误或数据包丢失.还有其他人经历过这个吗?这可能是司机的问题吗?到目前为止,我们还无法确定此异常的特定触发器.

我们在Windows Server 2003上运行II6.

sql-server asp.net iis-6 sql-server-2000 asp.net-3.5

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

将变量传递给触发器

我有一个trigger处理一些数据用于记录目的,如下所示:

CREATE TRIGGER trgDataUpdated
   ON tblData FOR UPDATE
AS 
BEGIN
    INSERT INTO tblLog ( ParentID, OldValue, NewValue, UserID )
    SELECT  deleted.ParentID, deleted.Value, inserted.Value, 
            @intUserID -- how can I pass this in?
    FROM    inserted INNER JOIN deleted ON inserted.ID = deleted.ID
END
Run Code Online (Sandbox Code Playgroud)

如何将变量@intUserID传入上面的触发器,如下面的代码所示:

DECLARE @intUserID int
SET @intUserID = 10

UPDATE tblData
SET    Value = @x
Run Code Online (Sandbox Code Playgroud)

PS:我知道我无法直接传入@intUserID触发器,它仅用于说明目的.

t-sql sql-server variables triggers sql-server-2000

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

更新表插入VARBINARY数据

当我运行SQL查询时,我得到这样的东西:

不允许从数据类型varchar到数据类型varbinary的隐式转换....使用CONVERT函数运行此查询.(严重性16)`

我要插入的数据看起来像

'00001200000000000010000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...FFF'
Run Code Online (Sandbox Code Playgroud)

怎么做这个查询?

查询看起来像:

UPDATE <table> SET VARBINARY_DATA = '00001200000000000010000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF....' WHERE ID = 12
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2000

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

SQL select max(date)和相应的值

可能重复:
如何获取包含最大值的表的记录?

我有一个如下所示的聚合查询:

SELECT TrainingID, Max(CompletedDate) as CompletedDate, Max(Notes) as Notes     --This will only return the longest notes entry
FROM HR_EmployeeTrainings ET
WHERE (ET.AvantiRecID IS NULL OR ET.AvantiRecID = @avantiRecID)
GROUP BY AvantiRecID, TrainingID            
Run Code Online (Sandbox Code Playgroud)

哪个有效,并且大部分时间都返回正确的数据,但我注意到了一个问题.返回的Notes字段不一定与max(completedDate)来自的记录匹配.相反,它将是最长的字符串?或者具有最高ASCII值的那个?如果两个记录之间存在关联,SQL Server会做什么?我甚至都不确定.我想得到的是max(completedDate)记录中的notes字段.我应该怎么做呢?

sql sql-server sql-server-2000

16
推荐指数
2
解决办法
15万
查看次数