标签: sql-server-2000

SQL用户定义的函数:在用户定义的函数中获取TOP n记录

为什么以下不起作用?

CREATE FUNCTION Test (@top integer)
RETURNS TABLE
AS
RETURN
SELECT TOP @top * FROM SomeTable
GO
Run Code Online (Sandbox Code Playgroud)

我只是希望能够指定要返回的结果数.[SQL Server 2000.]

谢谢!

sql sql-server sql-server-2000 user-defined-functions

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

如何找出哪些数据不会被投射?

我有一个SQL表,其日期字段定义为char(8)或20090609,时间字段定义为char(4)或1230.我将此数据移动到另一个表中,我想将两个字段组合在一起将它们放在新表中的smalldatetime字段中.我的查询是这样的:

INSERT NewTable(eventdate) 
SELECT
  CAST((datecol + ' ' + substring(timecol, 1, 2) + ':' + substring(timecol, 3, 2)) as smalldatetime)
FROM OldTable
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到一个错误:

将char数据类型转换为smalldatetime数据类型会导致超出范围的smalldatetime值.

我已经尝试检查len(datecol)和len(timecol)以确保它们至少是正确的字符数.我不知道如何找到有问题的数据,有什么建议吗?数据库是SQL2000,我正在使用SMO 2008.

sql t-sql sql-server-2000

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

SQL Server明年的第一天?

这不应该是这么难.我只需要以下内容:

SET @DueDate = CONVERT (DATETIME, '01/01/2010')
Run Code Online (Sandbox Code Playgroud)

但是,我需要务实,所以如果它是2010年3月,那么给定的日期将是'01/01/2011'.

我知道这很简单,但我的大脑并没有想出来.我确定这是一个DateAdd和getdate().

t-sql sql-server-2000

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

T-SQL参数

我在SQL Server 2000中有下表:

TABLE_NAME         |     COLUMN_NAME      |     TYPE_NAME      |    PRECISION    |    LENGTH  |    SCALE        |
test                     TestID                 int                 10                   4            0
test                     TestDecimal            decimal             18                   20           2
test                     TestFloat              float               15                   8            NULL
test                     TestMoney              money                19                   21            4
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我想创建一个基于我的表字段获取4个参数的存储过程,我该怎么做.我有这个解决方案:

CREATE PROCEDURE TestProc ( @TestID int, @TestDecimal decimal, @TestFloat float, @TestMoney money ) 
AS
.....
.....
.....
GO
Run Code Online (Sandbox Code Playgroud)

这是有效的,除了我认为@TestDecimal丢失其小数部分,从而将其转换为整数.我需要将@TestDecimal十进制(精度,比例)而不是十进制吗?如果是这样,我需要指定这种类型的参数编码的其他数值数据类型吗?

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

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

Sql server查询以展平记录层次结构

我有一个描述层次结构的表:

Name    MemberName
A       B
A       C
B       D
D       E
F       G
Run Code Online (Sandbox Code Playgroud)

MemberName引用同一个表的Name列.从这张表中,我可以轻松查询B和C是A中的成员,D是B的成员,E是D的成员,G是F的成员.

基于这种结构,很难编写一个查询,表明D和E也间接成为A的成员.D和E也间接成为B的成员等等.所以我需要做的是建立一个新的表该节目显示了所有间接成员.所以对于上面的表数据,我最终会得到一个包含以下内容的表:

Name    MemberName
A       B
A       C
A       D
A       E
B       D
B       E
D       E
F       G
Run Code Online (Sandbox Code Playgroud)

我首先将所有不是其他记录(顶级)记录成员的记录放入临时表中:

CREATE TABLE #TMP
(
    [Name] varchar(20),
    [MemberName] varchar(20)
)

DECLARE @iRowsFound INT
INSERT INTO #TMP ([Name],[MemberName]) 
(SELECT * FROM [HierarchyData] WHERE [Name] NOT IN 
   (SELECT [MemberName] FROM [HierarchyData]))
SELECT @iRowsFound = @@ROWCOUNT

Name    MemberName
A       B
A       C
F       G
Run Code Online (Sandbox Code Playgroud)

然后我的理论是,在一个while循环中,将临时表交叉连接到heirachy表,并将来自交叉连接的适用记录插回到临时表中,并执行while循环,直到十字架中没有更多适用的记录加入以插入:

WHILE (@iRowsFound > 0)
BEGIN …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2000 hierarchy

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

如何从对象ID和数据库ID确定SQL Server对象名?

我需要SQL Server 2005的行为,其中函数OBJECT_NAME接受两个参数,obj id并且db id,虽然SQL Server 2000只接受obj id此操作,但执行必须位于被检查对象所属的数据库的上下文中.

必须可以在函数中实现解决方案,因此可以在选择查询中使用它.

sql-server metadata sql-server-2000 object

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

谁删除了我的sql表行?

我有一个SQL表,从中删除数据.没有人知道如何删除数据.我添加了一个触发器并知道时间,但是没有正在运行的作业会删除数据.每当从此表中删除行时,我还添加了一个触发器.然后我将删除的行和SYSTEM_USER插入到日志表中,但这并没有多大帮助.我能做些什么来了解数据被删除的方式和方式?是否有可能获得服务器ID或其他东西?谢谢你的建议.

对不起:我正在使用SQL Server 2000.

**更新1*:了解数据如何被删除很重要 - 最好我想知道正在执行的DTS包或SQL语句.

sql triggers sql-server-2000

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

创建外键而不检查现有数据

这是一个2部分的问题.

问题1:我正在尝试在桌面上创建一个外键,我需要关闭"检查创建或重新启用时的现有数据".我知道这是一个可视化的选项,但我正在寻找一种以编程方式进行的方法.反正有没有这样做?

问题2:我有一个代码表和两个需要引用该代码表的表A和B. 我希望从关系表中引用这些,但我希望能够使用相同的列.我可以将2个外键指向同一列吗?

sql sql-server-2000 foreign-keys

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

如何在SQL Server 2000表中获取ROWGUIDCOL?

如何确定ROWGUIDCOLSQL Server 2000表中列的名称?

我试过看syscolumns,例如:

SELECT *
FROM syscolumns
WHERE id = OBJECT_ID('Currencies')
Run Code Online (Sandbox Code Playgroud)

但那里什么也没有,或者在MSDN页面上看起来像rowguidcol.


在SQL Server 2005中很容易

在SQL Server 2005中,您只需查询sys.columns,例如:

SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID('Currencies')
AND is_rowguidcol = 1
Run Code Online (Sandbox Code Playgroud)

容易狡猾.

sql-server sql-server-2000 uniqueidentifier

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

当我运行简单的选择查询时,是否有可能不显示最终受影响的行数?

我尝试使用OSQL将查询结果保存在文本文件中,然后将这些文本文件批量插入表中.OSQL部分是可以的,但是,在批量插入中,在查询结果末尾受影响的行数会导致错误.这是一个例子;

select item_number, description, price from item

3536114   Fruit mix     $3.99

3536229   DO 20 liquid  $9.99

3536251   Peppermint    $7.99

(3 rows affected) ------> I do not need this line.
Run Code Online (Sandbox Code Playgroud)

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

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