我们有两个数据库,Adb
和Bdb
. 在Bdb
,我们创建了一个观点,即引用另一种观点认为Adb
,像这样:CREATE VIEW Bdb.dbo.Bview AS SELECT * FROM Adb.dbo.Aview
。
我们有一个 SQL Authenticated Blogin
,映射到Buser
,Adb
和Bdb
,至少db_datareader
在两者上都有角色。
以下不起作用:
USE Bdb;
EXECUTE AS USER = 'Buser';
SELECT * FROM Bdb.dbo.Bview;
SELECT * FROM Adb.dbo.Aview;
Run Code Online (Sandbox Code Playgroud)
两个选择都会引发以下错误:
Msg 916, Level 14, State 1, Line 4
The server principal "Buser" is not able to access the database "Adb" under the current security context.
Run Code Online (Sandbox Code Playgroud)
但是,这有效:
USE Adb;
EXECUTE AS USER …
Run Code Online (Sandbox Code Playgroud) 我有以下带有示例值的表结构:
Number Reference Length Quantity
----------- ------------------------- --------------------------------------- ----------
16002983 ASH 14 383.000000 4
16002983 ASH 14 1669.000000 4
16002983 GLAS-NP 403.000000 1
16003002 SZR 16 1402.000000 1
16003002 Energy Surcharge F 56556.680000 1
16003256 SZR 14 726.000000 1
16003256 Energy Surcharge F 40706.820000 1
16003256 7283-ASB 726.000000 1
16003308 ASH 14 740.000000 4
Run Code Online (Sandbox Code Playgroud)
截至目前,该表有 742 个条目,并且每天都在扩展。
我需要找到一个Reference
在所有Number
s之间共享的,如果有的话。
如何?我甚至不知道我是否需要JOIN
S, GROUP BY
,别的东西吗?我似乎在逻辑上失败了。
任何帮助表示赞赏。
我在 SE 上至少回答了 5 个问题,但我一定已经因为沮丧而做了一些非常糟糕的事情。
我有一个存储过程,它返回这样的 XML:
<pmsg:Messages>
<pmsg:Message Info="blah" />
</pmsg:Messages>
Run Code Online (Sandbox Code Playgroud)
我需要获取Info
.
DECLARE @xmlMessage XML;
EXEC procReturnsXml @xmlMessage OUTPUT;
-- returns 0 rows
WITH XMLNAMESPACES('pmsg' AS pmsg)
SELECT msgs.msg.value('@Info', 'nvarchar(max)')
FROM @xmlMessage.nodes('pmsg:Messages/pmsg:Message') msgs(msg);
-- returns NULL
WITH XMLNAMESPACES('pmsg' AS pmsg)
SELECT @xmlMessage.value('(/pmsg:Messages/pmsg:Message/@Info)[1]', 'nvarchar(max)');
-- returns NULL
WITH XMLNAMESPACES('pmsg' AS pmsg)
SELECT t.x.value('(/pmsg:Messages/pmsg:Message/@Info)[1]', 'nvarchar(max)') AS INFO
FROM @xmlMessage.nodes('/*') t(x);
Run Code Online (Sandbox Code Playgroud)
一般来说,我根本不明白这些是什么意思。你能提供一个关于这个案例的例子吗?