我在数据库项目中使用MERGE语句来填充静态值集中的引用数据,如下所示:
MERGE INTO dbo.[User] AS TARGET
USING (VALUES
('me@somewhere.com', 'My Name'))
AS SOURCE(UserName, FullName)
ON SOURCE.UserName = TARGET.UserName
WHEN NOT MATCHED BY TARGET THEN
INSERT (UserId, UserName, FullName)
VALUES (NEWID(), UserName, FullName);
Run Code Online (Sandbox Code Playgroud)
当我想根据其他表中的内容填充辅助表时,会出现问题.例如,我的UserPermission表包含用户ID和角色ID,我希望我的静态值设置为('me@somewhere.com','Admin'),并且能够加入User和Permission以获得INSERTing的ID值.不知道该怎么办......
编辑:
用户表(ID,用户名)1,John Smith 2,Mark Wahlerg
角色表(ID,RoleName)1,管理员2,用户3,访客
用户角色表(用户ID,角色ID)
我希望MERGE语句的SQL调整User-Role表,以便我可以指定类似的东西:
USING(VALUES
('John Smith', 'Administrator'),
('Mark Wahlburg', 'User')
Run Code Online (Sandbox Code Playgroud)
并且它将连接以确定ID,插入不存在的组合(并且可能删除那些但不在MERGE中的组合.
解:
WITH CTE AS
(
SELECT UserId, RoleId
FROM (VALUES
('John Smith', 'Administrator'),
('Mark Wahlburg', 'User'))
AS SOURCE(UserName, RoleName)
INNER JOIN User ON SOURCE.UserName = User.UserName
INNER JOIN Role ON SOURCE.RoleName …Run Code Online (Sandbox Code Playgroud) 我开始将WebApi和OData集成到测试台应用程序中.让我们保持简单,坚持使用一个域实体Customer.显然我会有一个MVC控制器.搜索得到它自己的视图模型(基于Lucene索引),这样将是单独的控制器,现在ODataController.但由于视图/编辑页面将拥有自己的视图模型,因此它们将成为自己的控制器.这开始感觉有点矫枉过正.
试图找出一个好的设计来使这个工作,并仍然使用代表实体的URL的想法.URL中的实体应该是Customer还是以某种方式根据URL params提供不同的表示形式?或者Customer/CustomerSearch/CustomerEdit应该是不同的实体(听起来不对)?
我有一个jQueryUI自动完成,它从客户列表中提取并基于选择器[input data-role ="customer-search"]附加.选择客户后,我会进行AJAX调用以获取完整的客户详细信息.这部分我工作得很好.问题在于我无法找到将淘汰纳入其中的方法.我理想的情况是像"onSelect:customerSelected"这样的自定义绑定,它将接受选定的Customer JSON并将其集成到整个模型中,这将导致更新页面上的一堆字段,例如model.Customer .Address,model.Customer.Type.
我正在反对的地方是我从AJAX调用中获得Customer JSON之后的连接点,如何将它发送到viewmodel上的"customerSelected"方法,该方法与我附加jQuery自动完成的相同输入相关联.
asp.net-mvc ×1
jquery-ui ×1
knockout.js ×1
merge ×1
rest ×1
sql-merge ×1
sql-server ×1
t-sql ×1