我有两个大表的SQL Server 2008 Ent和OLTP数据库.如何在不中断服务的情况下将此表移动到另一个文件组?现在,在此表中,每秒插入约100-130条记录和30-50条记录.每个表有大约100M记录和六个字段(包括一个字段地理).
我通过谷歌寻找解决方案,但所有解决方案都包含"创建第二个表,从第一个表插入行,删除第一个表,bla bla bla".
我可以使用分区功能来解决这个问题吗?谢谢.
我有一个包含数百个笨拙命名表的数据库(CG001T,GH066L等),我对每个人都有"友好"名称的观点(例如,"CUSTOMERS"视图是"SELECT*FROM GG120T") .我想在我的视图中添加"WITH SCHEMABINDING",以便我可以获得与之相关的一些优点,例如能够索引视图,因为少数视图已经计算了动态计算成本昂贵的列.
SCHEMABINDING这些观点是否存在缺点?我发现一些文章含糊地暗示了缺点,但从未详细介绍过它们.我知道一旦视图是模式绑定的,你就不能在没有先删除视图的情况下改变任何会影响视图的内容(例如,列数据类型或排序规则),所以这是一个,但除此之外?似乎索引视图本身的能力远远超过了更仔细地规划模式修改的缺点.
我正在转换SQL Server中的一些数据:
INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)
Run Code Online (Sandbox Code Playgroud)
所以我需要从源表中反转位值.我期望NOT工作,因为这是我在代码中的方式,但事实并非如此.我能想到的最优雅的方式是:
INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)
Run Code Online (Sandbox Code Playgroud)
有更标准的方法吗?
我们如何在SQL Server 2008中查看哪个触发器已启用或已禁用?
我正在执行一个INSERT到一个sql 2008 db.如何在T-SQL中指定在DATETIMEOFFSET列中插入NOW?GETDATE()?
使用SQL Server 2008.我有一个包含以下列的表:
sampleData (nvarchar(max))
Run Code Online (Sandbox Code Playgroud)
其中一些行中此列的值是格式如下的列表:
["value1","value2","value3"]
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个简单的查询,通过检测左括号,返回列表格式为这样的列的所有行.
SELECT * from sampleTable where sampleData like '[%'
Run Code Online (Sandbox Code Playgroud)
上面的查询不起作用,因为'['是一个特殊的字符,我不能为我的生活找出如何逃避括号所以我的查询做我想要的.
谢谢你的任何建议!
海家伙,
我使用了以下分割功能,
CREATE FUNCTION dbo.Splitfn(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
Run Code Online (Sandbox Code Playgroud)
我在查询中使用了这个函数并执行了它
ALTER PROCEDURE [dbo].[Employees_Delete]
-- Add the parameters …Run Code Online (Sandbox Code Playgroud) 我有一个订单队列,由多个订单处理器通过存储过程访问.每个处理器都传入一个唯一的ID,用于锁定接下来的20个订单供自己使用.然后,存储过程将这些记录返回给订单处理器以进行操作.
在某些情况下,多个处理器能够检索相同的"OrderTable"记录,此时它们会尝试同时对其进行操作.这最终导致在该过程的后期抛出错误.
我的下一步行动是允许每个处理器获取所有可用的订单并且只是循环处理器,但我希望简单地使这部分代码线程安全,并允许处理器随时抓取记录.
所以明确地 - 任何想法为什么我遇到这种竞争条件以及如何解决问题.
BEGIN TRAN
UPDATE OrderTable WITH ( ROWLOCK )
SET ProcessorID = @PROCID
WHERE OrderID IN ( SELECT TOP ( 20 )
OrderID
FROM OrderTable WITH ( ROWLOCK )
WHERE ProcessorID = 0)
COMMIT TRAN
SELECT OrderID, ProcessorID, etc...
FROM OrderTable
WHERE ProcessorID = @PROCID
Run Code Online (Sandbox Code Playgroud) 它们会立即回滚吗?它们会在一段时间后回滚吗?他们是否处于未承诺状态?
如果使用连接池并且只是重置连接,行为是否相同?
我有一个存储过程,我需要调用几次不同的时间,每次传递不同的参数.我想将结果收集为单个数据集.这样的事情可能......
exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3
Run Code Online (Sandbox Code Playgroud)
我尝试使用上面的语法,但得到错误...
Incorrect syntax near the keyword 'UNION'
Run Code Online (Sandbox Code Playgroud)
我正在处理的存储过程非常复杂,对我来说是一个"黑盒子",所以我无法进入存储过程的定义并改变任何东西.关于如何一起收集结果的任何建议?
我正在使用SQL Server 2008 R2.谢谢你的帮助.
sql-server ×10
sql ×7
t-sql ×4
datetime ×1
filegroup ×1
queue ×1
transactions ×1
triggers ×1
union ×1