为什么以下不起作用?
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表,其日期字段定义为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.
这不应该是这么难.我只需要以下内容:
SET @DueDate = CONVERT (DATETIME, '01/01/2010')
Run Code Online (Sandbox Code Playgroud)
但是,我需要务实,所以如果它是2010年3月,那么给定的日期将是'01/01/2011'.
我知道这很简单,但我的大脑并没有想出来.我确定这是一个DateAdd和getdate().
我在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十进制(精度,比例)而不是十进制吗?如果是这样,我需要指定这种类型的参数编码的其他数值数据类型吗?
我有一个描述层次结构的表:
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 2005的行为,其中函数OBJECT_NAME接受两个参数,obj id并且db id,虽然SQL Server 2000只接受obj id此操作,但执行必须位于被检查对象所属的数据库的上下文中.
必须可以在函数中实现解决方案,因此可以在选择查询中使用它.
我有一个SQL表,从中删除数据.没有人知道如何删除数据.我添加了一个触发器并知道时间,但是没有正在运行的作业会删除数据.每当从此表中删除行时,我还添加了一个触发器.然后我将删除的行和SYSTEM_USER插入到日志表中,但这并没有多大帮助.我能做些什么来了解数据被删除的方式和方式?是否有可能获得服务器ID或其他东西?谢谢你的建议.
对不起:我正在使用SQL Server 2000.
**更新1*:了解数据如何被删除很重要 - 最好我想知道正在执行的DTS包或SQL语句.
这是一个2部分的问题.
问题1:我正在尝试在桌面上创建一个外键,我需要关闭"检查创建或重新启用时的现有数据".我知道这是一个可视化的选项,但我正在寻找一种以编程方式进行的方法.反正有没有这样做?
问题2:我有一个代码表和两个需要引用该代码表的表A和B. 我希望从关系表中引用这些,但我希望能够使用相同的列.我可以将2个外键指向同一列吗?
如何确定ROWGUIDCOLSQL Server 2000表中列的名称?
我试过看syscolumns,例如:
SELECT *
FROM syscolumns
WHERE id = OBJECT_ID('Currencies')
Run Code Online (Sandbox Code Playgroud)
但那里什么也没有,或者在MSDN页面上看起来像rowguidcol.
在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)
容易狡猾.
我尝试使用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-server-2000 ×10
sql ×6
sql-server ×6
t-sql ×4
foreign-keys ×1
hierarchy ×1
metadata ×1
object ×1
triggers ×1