我似乎无法弄清楚如何从代码中设置Sql Server中的默认数据库.这可以是.Net代码或T-Sql(T-Sql会很好用,因为它很容易在任何语言中使用).我搜索了Google,只能在Sql Server Management Studio中找到它.
当使用SetFirstResult(start)和SetMaxResults(count)实现分页的方法时,我注意到生成的查询只执行a select top count * from some_table并且它不考虑start参数或至少不考虑数据库级别.看来如果我指示NHibernate执行以下查询:
var users = session.CreateCriteria<User>()
.SetFirstResult(100)
.SetMaxResults(5)
.List<User>();
Run Code Online (Sandbox Code Playgroud)
105条记录将在数据库服务器和应用程序之间传输,这将记录前100条记录.对于包含许多行的表,这可能是个问题.
我已经验证了使用SQLite数据库NHibernate利用OFFSET和LIMIT关键字来过滤数据库级别的结果.我知道在SQL Server 2000中没有等效的OFFSET关键字和Oracle ROWNUM,但有没有解决方法?SQL Server 2005/2008怎么样?
有没有办法查询数据库并检索所有存储过程及其参数的列表?
我正在使用SQL Server 2000.
我需要针对存储URL编码文本的遗留表运行查询.我需要在我的结果中解码此文本.我该如何实现这一目标?
我试图在链接服务器上调用用户定义函数(UDF):
CREATE FUNCTION [dbo].[UserGroupMembershipNames](@UserGUID uniqueidentifier)
RETURNS VARCHAR(8000)
AS
BEGIN
RETURN ASILIVE.ReportManager.dbo.UserGroupMembershipNames(@UserGUID)
END
Run Code Online (Sandbox Code Playgroud)
这不起作用,如PRB中所述:四部分链接服务器查询中的用户定义函数调用失败,错误消息170.他们还给出了一个解决方法:
例如,而不是以下查询
Run Code Online (Sandbox Code Playgroud)Select * from Linked_Server.northwind.dbo.square_value(10)使用Openquery函数运行查询:
Run Code Online (Sandbox Code Playgroud)Select * from Openquery(Linked_Server,'select northwind.dbo.square_ value(10)')如果用户定义的函数采用变量或标量参数,则可以使用sp_executesql存储过程来避免此行为.例如:
Run Code Online (Sandbox Code Playgroud)exec Linked_Server.northwind.dbo.sp_executesql N'SELECT northwind.dbo.square_value(@input)',N'@input int',@input=10
我如何将这种解决方法应用于我的情况,以及这个人的情况?
换一种说法:
如何在链接服务器上调用UDF?
sql-server sql-server-2000 linked-server user-defined-functions
当我将数据保存到表中时,会在尾部的值中添加额外的空格.我观察到,当列长度为5时,如果我插入3个字符长度的值,则添加2个额外的空格.可以任何人如何解决这个问题.
在Sql Server中是否有类似printf的功能?我想要与RAISERROR函数相同的功能,但我不想抛出错误或打印消息,而是想在varchar中编写它,因为我的ERP不会让我处理错误消息.
这是SQL Server 2000.
RAISERROR的实际工作示例:
declare @name varchar(10)
set @name = 'George'
RAISERROR ('Hello %s.', 10, 1, 'George')
Run Code Online (Sandbox Code Playgroud)
版画 Hello George
我在找什么:
declare @name varchar(10), @message varchar(50)
set @name = 'George'
SET @message = printf('Hello %s.', 'George')
return @message
Run Code Online (Sandbox Code Playgroud)
这会回来 Hello George
我正在将遗留的SQLS2k迁移到2008R2,似乎所有数据访问都是通过存储过程完成的,并且任何自定义查询都使用旧的*= =*外连接语法.有超过一百个proc所以我不想单独打开每一个以查看它是否使用该语法(大多数不会),是否有一种方法可以查询元数据以获取一个procs/functions/views列表/触发器,然后循环搜索*=或=*字符串,打印出违规对象的名称?
我的背景是oracle,我知道如何在那里找到元数据视图,但我对Sql Server有点新.降级兼容性版本不是一种选择.
谢谢!
我正在对构建在SQL Server 2000上的遗留应用程序进行一些调整,不用说我只想做到绝对最小,因为担心它可能会崩溃.
我有一个大型用户表,tbUsers,带有IsDeleted的BIT标志.我想将所有当前和未来的IsDeleted = 1用户记录存档到我的存档表tbDeletedUsers中.
移动当前删除的用户是直截了当的,但我想要一种方法来移动设置IsDeleted标志的任何未来用户.我可以在列上使用标准的AFTER触发器,但是我计划在tbUser表中添加一些违反这一点的约束,我想要的是我的INSTEAD OF UPDATE触发器触发并将记录移动到存档表中?
我想我的问题是......是否有可能在更新单个列时触发INSTEAD OF UPDATE触发器?这是我到目前为止:
CREATE TRIGGER trg_ArchiveUsers
INSTEAD OF UPDATE ON tbUsers
AS
BEGIN
...
END
GO
Run Code Online (Sandbox Code Playgroud)
如果是这样的例子(SQL 2000兼容)将非常感谢!
对于存储过程,我有完整的源代码.但是该存储过程的名称已丢失.在此数据库中,有数百个存储过程.
那么有没有办法通过使用其内容或使用内容中的任何变量来找出存储过程的名称?
这让我很困惑.自从受到赞赏以来,我们将给予帮助.
sql-server-2000 ×10
sql-server ×7
sql ×3
database ×1
join ×1
nhibernate ×1
outer-join ×1
paging ×1
urldecode ×1