我有一个非常大的(2.5GB,55百万节点)XML文件,格式如下:
<TopNode>
<Item id = "Something">
<Link>A link</Link>
<Link>Another link</Link>
<Link>One More Link</Link>
</Item>
<Item id = "Something else">
<Link>Some link</Link>
<Link>You get the idea</Link>
</Item>
</TopNode>
Run Code Online (Sandbox Code Playgroud)
我想将其扁平化为以下SQL表:
-----------------------------------------
| Item | Link |
-----------------------------------------
| Something | A link |
| Something | Another link |
| Something | One More Link |
| Something Else | Some Link |
| Something Else | You get the idea |
|----------------|----------------------|
Run Code Online (Sandbox Code Playgroud)
我正在使用SQL2008,如果这有所作为.
什么是最简单,最有效的方法(最好使用SQL Server/.NET堆栈)从A点到B点,记住涉及的文件大小?
我正在对我的表("用户")使用视图("UsersActive").该视图只有一个过滤器,它检查DateTime Users.DeletedOn是否为NULL; 它基本上包含所有未删除的用户.
如果我现在对视图而不是表执行Linq查询,它们是否仍然使用表索引或者我是否需要为视图创建特殊索引?在我的理解中,View只不过是一个预定义的查询,应该就像我直接查询它一样:
SELECT*FROM Users WHERE DeletedON = NULL
我的假设是基础表的索引仍然会被正确使用吗?
有没有办法从变量中选择数据库?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Run Code Online (Sandbox Code Playgroud) 我正在为数据库应用程序编写第二个接口,以解决原始接口的一些缺点.不幸的是,如果我创建新记录,则不会生成预期的审计跟踪记录.如果数据库设计已经将这些细节用于表触发器,那么肯定会很好,或者为诸如将新记录插入这些表之类的操作提供存储过程API.
应用程序应该以这种方式设计吗?存储过程中应该有多少数据库应用程序?
我知道在向包含SQL Server中的数据的表中添加列时,该列必须具有NULL选项或默认值.否则SQL Server会用新的行填充什么?
我不知道为什么我不能在空表中添加NOT NULL列.我已经在两个SQL 2008实例和一个SQL 2005实例上尝试了这个,没有任何问题.但是,使用SQL 2000的客户确实存在此问题.这是与SQL 2000相关还是可以关闭的选项.我们希望这是一个选择.
Select @@Version
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 2000 - 8.00.760(Intel X86)2002年12月17日14:22:05版权所有(c)1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.1(Build 2600:Service Pack 3)
Select count(*) from actinv
0
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL
Run Code Online (Sandbox Code Playgroud)
消息4901,级别16,状态1,行1 ALTER TABLE仅允许添加可包含空值或指定了DEFAULT定义的列.列'BATCHNUMBER'无法添加到表'ActInv'中,因为它不允许空值并且不指定DEFAULT定义.
我已经接管了一个项目,它有一个包含超过30列的用户表.糟糕的是,列的更改和添加不断发生.
这不对.
我应该推动将额外的字段作为值移动到第二个表中并创建存储这些列名的第三个表吗?
user
id
email
user_field
id
name
user_value
id
user_field_id
user_id
value
Run Code Online (Sandbox Code Playgroud) 抛出以下异常:
错误消息:Microsoft.SqlServer.Management.Smo.FailedOperationException:数据库'4d982a46-58cb-4ddb-8999-28bd5bb900c7'的删除失败.---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常.---> System.Data.SqlClient.SqlException:无法删除数据库"4d982a46-58cb-4ddb-8999-28bd5bb900c7",因为它当前正在使用中.
知道是什么导致了这个吗?
是否可以调用SMO函数来完成任何正在运行的Transact-SQL语句?
在sql server 2005中,在更新触发器内部有一种方法可以找到原始更新查询修改的字段列\列.
我有一个包含150列的表,如果只更新了一个特定字段,则触发器内部需要知道(并且没有其他字段被修改)
我可以写一个很长的SQL来比较150列,但它会容易出错并且看起来很愚蠢!
任何体面的解决这个问题的方法.我希望有一些sql2005 api会来救我.
这是美国特有的区域,其中认为一周的开始是星期日; 我希望能够让SQL给我一个相对于今天的下一个星期日的日期[getDate()].如果今天是1月15日,它将于1月18日返回; 如果今天是星期天,它应该返回下一个星期日,即25日.这对于编写UDF来说是微不足道的,但我很好奇是否有其他人有其他技巧/想法?
这是我正在尝试调试的一些实际代码:
BEGIN
OPEN bservice (coservice.prod_id);
FETCH bservice
INTO v_billing_alias_id, v_billing_service_uom_id, v_summary_remarks;
CLOSE bservice;
v_service_found := 1;
-- An empty fetch is expected for some services.
EXCEPTION
WHEN OTHERS THEN
v_service_found := 0;
END;
Run Code Online (Sandbox Code Playgroud)
当参数化游标 bservice(prod_id) 为空时,它会将 NULL 提取到三个变量中,并且不会引发异常。
那么编写这段代码并期望它抛出异常的人都是错误的,对吗?该注释似乎暗示着空获取是预期的,然后它设置一个标志以供以后处理,但我认为这段代码也不可能用空集进行测试。
显然,它应该使用 bservice%NOTFOUND 或 bservice%FOUND 或类似的。