我正在尝试评估商店访客对 COVID-19 传播的影响。
这是一个简单的场景:
当我收集所有访问者数据以及他们在一段时间内遇到的人时,数据集如下所示:
表visitorByEmployee:
| VisitorID | EmployeeID | Contact |
+-----------+------------+-------------------+
| 100 | X123 | 3/11/2020 1:00 |
| 100 | X124 | 3/11/2020 1:10 |
| 101 | X123 | 3/12/2020 1:11 |
| 101 | X125 | 3/11/2020 1:20 |
| …Run Code Online (Sandbox Code Playgroud) 我有一张桌子sql-server-2016:
CREATE TABLE #tempData (A int not null)
INSERT INTO #tempData VALUES (0);
GO
Run Code Online (Sandbox Code Playgroud)
现在我可以调用我的 R 脚本,将表作为输入数据(包括列名):
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
df <- InputDataSet
df$B <- 1L'
, @input_data_1 = N'SELECT * FROM #tempData'
, @output_data_1_name = N'df'
WITH RESULT SETS (
(A int not null, B int not null)
);
Run Code Online (Sandbox Code Playgroud)
返回:
A B
0 1
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。但是我可以在不指定名称{A,B} 的情况下执行相同操作吗,即它将data.frame直接使用来自 的名称。
我刚刚在新工作站上全新安装了 VS2015 Update 2,并开始运行一些使用 SQL LocalDb 的集成测试。他们因以下原因而失败SqlException:
附加信息:本地数据库运行时:无法创建命名实例。
指定的 LocalDB 版本在此计算机上不可用。
我们使用的连接字符串是(并且以前使用 VS2013):
server=(localdb)\SystemTest;Integrated Security=true
Run Code Online (Sandbox Code Playgroud)
如您所见,这没有指定任何版本,实际上是在尝试连接到命名实例。
如果我跑sqllocaldb v我得到:
Microsoft SQL Server 2014 (12.0.2000.8)
Microsoft SQL Server 2016 Release Candidate 0 (RC0) (13.0.1100.286)
Run Code Online (Sandbox Code Playgroud)
我尝试手动创建和启动“SystemTest”实例,甚至指定版本,但两者似乎都导致抛出相同的 SqlException。
连接字符串语法是否已更改?我错过了什么?
更新:
如果我使用自动实例(现在在 SQL2014 及更高版本上命名为“MSSQLLocalDb”),代码工作得很好。比较这两个实例时,sqllocaldb i除了一个是自动创建之外,它们都是相同的。他们都在Running州内。所以看起来问题只发生在命名实例上。
我正在尝试使用 SQL Server 2016 构建一个包含数组的 JSON 对象。
数组的源数据本身就是 JSON,因此我在JSON_QUERYselect 语句内部使用,并将 FOR JSON 子句应用于该 select 语句。
一切都工作得很好,直到我将JSON_QUERY子句包装在CASE语句中(在某些情况下不得包含数组,即必须为空)。
下面的代码说明了这个问题:
declare @projects nvarchar(max) = '{"projects": [23439658267415,166584258534050]}'
declare @id bigint = 123
SELECT
[data.array1] = JSON_QUERY(@projects, '$.projects') -- returns an array - perfect.
, [data.array2] = CASE WHEN 1 is NOT NULL
THEN JSON_QUERY(@projects, '$.projects')
ELSE NULL END -- returns an array - still good!
, [data.array3] = CASE WHEN @id is NOT NULL
THEN JSON_QUERY(@projects, '$.projects')
ELSE …Run Code Online (Sandbox Code Playgroud) 尝试重命名表并使用它时遇到一个非常奇怪的问题。
我有一个名为oldTable的表并将其重命名为newTable。
我可以使用以下方法在此表上成功使用select:
SELECT * FROM database.dbo.newTable;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试像这样使用更新时:
UPDATE database.dbo.newTable SET foo = bar where id = 1;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Msg 208, Level 16, State 1, Procedure archive, Line 4 [Batch Start Line 0]
Invalid object name 'oldTable'.
Run Code Online (Sandbox Code Playgroud)
看起来名称 oldTable 存储在某处,并通过某种引用在此处使用。尝试更新时,它同时发生在 ssms 和原始 php+sql 上。
任何人有任何想法?
我目前正在使用 Visual Studio 2015(在 BIDS 2008 中制作)更新我们所有的 ETL,并将它们重新部署到在 SQL Server 2016(最初是 2008R2)上运行的新报告服务器。
在更新其中一个 ETL 时,我收到此错误:
HRESULT 异常:0xC0202009 负载暂存表错误 [OLE DB 源 [129]]:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“无效的对象名称‘dbo.TimeSheets’。”。
这是我尝试过的:
我有一个 JSON 对象,其中一个属性的值很长。当我尝试使用 提取此值时JSON_VALUE(),它返回 null。
declare @json nvarchar(max) =
'
{
"AVeryLongValue": "Founded in 2008, Stack Overflow is the largest, most trusted online community for developers to learn, share their knowledge, and build their careers. More than 50 million professional and aspiring programmers visit Stack Overflow each month to help solve coding problems, develop new skills, and find job opportunities. Stack Overflow partners with businesses to help them understand, hire, engage, and enable the worlds developers. Our products …Run Code Online (Sandbox Code Playgroud) 考虑下表
我需要生成一个类别组 =“国家”的条形图。该图表应仅显示基于国家/地区记录计数的前 3 个组。我已经为类别组应用了一个过滤器,将 Count(Country) 的前 N 个条件指定为 3。生成的图表根据计数按预期应用过滤器,但即使存在具有重复值的条,我也只需要显示 3 个条。
下面是我得到的图表。
预期结果
现在我知道了,我可以在我的数据集中用排名值创建一个额外的列,然后在该列上应用过滤器以获得预期的结果(我已经尝试过这个,并且它有效)
有没有办法在不改变底层数据集的情况下达到预期的结果?
注意:上面显示的数据集是我的数据集的高度简化版本。实际上,我有一个包含很多列的庞大数据集。相同的数据集已用于各种图表(在不同的列上分组)。
sql-server reporting-services business-intelligence sql-server-2016 ssrs-2016
创建时态表时,我们需要定义开始和结束日期时间列,这些列在或hidden中不可见。我想再添加一列,其中包含有关已提交更改的用户的信息。SELECT *INSERT without columns
问题是,我收到以下错误:
Msg 13735, Level 16, State 1, Line 10
Cannot alter HIDDEN attribute on column 'UserID' in table 'GK' because this column is not a generated always column.
Run Code Online (Sandbox Code Playgroud)
这是代码:
DROP TABLE IF EXISTS GK;
CREATE TABLE GK
(
[ID] INT
,[UserID] BIGINT DEFAULT (CONVERT(BIGINT, SESSION_CONTEXT(N'user_id')))
)
ALTER TABLE GK
ALTER COLUMN [UserID] ADD HIDDEN;
Run Code Online (Sandbox Code Playgroud)
为什么我不允许在此类列上添加此属性?
我想聚合单列值,中间有分隔符并带有一些前缀。下面是尝试过的有效代码。
SELECT concat('TNB/IAG/',STRING_AGG(WF_ValStr, '/')) AS Result
FROM wfattrdata where wf_id=35262472 and WF_AttrID in (28,29,30,31,33);
Run Code Online (Sandbox Code Playgroud)
我可以在最新的 MSSql 版本中得到以下预期结果。
TNB/IAG/1/2/3/4/5
Run Code Online (Sandbox Code Playgroud)
如何替换上述查询以使其在 SQL Server 2016 中工作?