小编Shn*_*ugo的帖子

如何拆分字符串以便我可以访问项目x?

使用SQL Server,如何拆分字符串以便访问项目x?

拿一个字符串"Hello John Smith".如何按空格分割字符串并访问索引1处应该返回"John"的项目?

sql t-sql sql-server split

480
推荐指数
17
解决办法
82万
查看次数

我什么时候可以在SQL表中保存JSON或XML数据

当使用SQLMySQL(或任何关系数据库)时 - 我知道将数据保存在常规列中更适合索引和其他目的......

加载和保存JSON数据有时候要简单得多.并使开发更容易.

是否存在用于JSON在DB中保存原始数据的"黄金规则" ?

这样做是绝对错误的做法吗?

摘要

给出了非常好的答案,但毫无疑问,最有组织的是@Shnugo给出的答案,值得赏心悦目.

还想指出@Gordon Linoff和@Amresh Pandey给出的解释其他特殊用例的答案.

感谢上帝,大家好!

xml sql json normalization structured-data

51
推荐指数
5
解决办法
4万
查看次数

删除视图(如果存在)

我有脚本,我想首先删除视图,然后创建它.我知道如何放桌子:

IF EXISTS (SELECT * FROM sys.tables WHERE name = 'table1' AND type = 'U') DROP TABLE table1;
Run Code Online (Sandbox Code Playgroud)

所以我对观点做了同样的事情:

IF EXISTS (SELECT * FROM sys.views WHERE name = 'view1' AND type = 'U') DROP VIEW view1;
create view1 as(......)
Run Code Online (Sandbox Code Playgroud)

然后我得到了错误:

'CREATE VIEW'必须是查询批处理中的第一个语句.

sql sql-server view create-view

28
推荐指数
2
解决办法
7万
查看次数

使用SQL FOR XML创建HTML表

我正在使用SQL Server 2008 R2中的FOR XML语句创建HL7 Continuity of Care Document(CCD).

我用这种方法做了很多,但这是我第一次在HTML表格中表示部分数据,这给我带来了麻烦.

所以,我在表格中有以下信息:

  Problem  |   Onset    | Status
---------------------------------
  Ulcer    | 01/01/2008 | Active
  Edema    | 02/02/2005 | Active
Run Code Online (Sandbox Code Playgroud)

我试图渲染以下内容

<tr>
    <th>Problem</th>
    <th>Onset</th>
    <th>Status</th>
</tr>
<tr>
    <td>Ulcer</td>
    <td>01/01/2008</td>
    <td>Active</td>
</tr>
<tr>
    <td>Edema</td>
    <td>02/02/2005</td>
    <td>Active</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我正在使用此查询:

SELECT    p.ProblemType AS "td"
    , p.Onset AS "td"
    , p.DiagnosisStatus AS "td"
FROM tblProblemList p
WHERE p.PatientUnitNumber = @PatientUnitNumber
FOR XML PATH('tr')
Run Code Online (Sandbox Code Playgroud)

我一直得到以下内容:

<tr>
  <td>Ulcer2008-01-01Active</td>
</tr>
<tr>
  <td>Edema2005-02-02Active</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

有人有任何建议吗?

html xml t-sql sql-server html-table

27
推荐指数
3
解决办法
6万
查看次数

使用T-SQL,从字符串返回第n个分隔元素

我需要创建一个函数,它将返回分隔字符串的第n个元素.

对于数据迁移项目,我使用SQL脚本将存储在SQL Server数据库中的JSON审核记录转换为结构化报告.目标是提供脚本使用的sql脚本和sql函数,而无需任何代码.

(这是一个短期修复,将在ASP.NET/MVC应用程序中添加新的审核功能时使用)

可用的表格示例不缺少分隔字符串.我选择了一个Common Table Expression示例http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings

示例:我想从'1,222,2,67,888,1111'返回67

t-sql sql-server split sql-server-2008

12
推荐指数
4
解决办法
2万
查看次数

删除重复的子查询

我有一个复杂的SQL查询,可以简化到下面:

Select ColA,ColB,ColC,ColD
From MyTable
Where (ColA In (Select ItemID From Items Where ItemName like '%xxx%') 
    or ColB In (Select ItemID From Items Where ItemName like '%xxx%'))
Run Code Online (Sandbox Code Playgroud)

如您所见,子查询出现两次.编译器是否足够智能来检测它并仅获取子查询的结果一次?或者子查询运行两次?

仅供参考,表项目大约有20,000行,MyTable有大约200,000行.

是否有另一种方法来重写此SQL语句,以便子查询只出现/运行一次?

更新:主查询中的Where子句是动态的,仅在需要时添加(即仅在用户搜索"xxx"时).因此,不可能对主select语句进行更改或重新构造查询.

sql t-sql sql-server dynamic-sql common-table-expression

12
推荐指数
1
解决办法
2155
查看次数

在用户定义的函数中使用RAND()

我正在尝试创建一个用户定义的函数来调用其中的系统RAND()函数,当我尝试使用以下消息创建它错误的函数时:

消息443,级别16,状态1,过程getNumber,行10
在函数内无效使用副作用运算符'rand'.

我的功能代码:

CREATE FUNCTION getNumber(@_id int)
RETURNS DECIMAL(18,4)
AS
BEGIN
   DECLARE @RtnValue DECIMAL(18,4);

   SELECT TOP 1 @RtnValue = EmployeeID 
   FROM dbo.Employees
   ORDER BY EmployeeID DESC

   SET @RtnValue = RAND() * @RtnValue * (1/100)

   RETURN @RtnValue;
END
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

sql-server sql-server-2012

8
推荐指数
3
解决办法
1万
查看次数

由于ANSI_Padding,创建索引失败

当我尝试在SQL Server 2008 R2中创建索引时,我收到以下错误.

CREATE INDEX失败,因为以下SET选项具有不正确的设置:'ANSI_PADDING'

索引脚本是

CREATE UNIQUE NONCLUSTERED INDEX [IX_TabPermission_Roles] ON [dbo].         
[TabPermission] 
(
    [RoleID] ASC,
    [TabID] ASC,
    [PermissionID] ASC
)
INCLUDE ( [AllowAccess]) 
WHERE ([RoleID] IS NOT NULL)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF,      
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

表定义在这里.在表定义中,您可以发现没有包含char,varchar,binary或varbinary的列.

如果我运行索引创建脚本SET ANSI_PADDING On,它的工作原理.我的问题是为什么我需要设置它On,在表定义中,我没有任何具有char,varchar,binary或varbinary的列.您还可以发现此表中的所有这些列都具有Ansi_padding设置Off. 此表中列的ANSI填充

sql-server indexing

6
推荐指数
1
解决办法
5645
查看次数

日期转换和文化:DATE和DATETIME之间的差异

我已经从字符串中写了很多关于datedatetime转换的答案.生活在一个讲德语的国家,我习惯于处理非us_english日期格式,我习惯使用安全文字(我更喜欢ODBC格式),我从不使用CONVERT第三个参数.这不是问题,请不要在这方面提供答案......

通常人们可以读到,格式yyyy-mm-dd是标准的(ISO8601,ANSI,无论如何),因此文化独立.

今天我必须编辑其中一个较旧的答案,正如我在那里所说,观察到的行为取决于其他东西.

问题是:

为什么(如果有原因)DATE和之间存在差异DATETIME

...至少在我的环境中,目前是SQL Server 2014(12.0.4237.0).

我希望,之前没有问过......

试试这个:

没问题,DATE按预期工作

SET LANGUAGE ENGLISH;
DECLARE @dt DATE='2017-01-13'; 
SELECT @dt;
SELECT CAST('2017-01-13' AS DATE);
SELECT CONVERT(DATE,'2017-01-13'); --no culture / format specified
GO
SET LANGUAGE GERMAN;
DECLARE @dt DATE='2017-01-13';
SELECT @dt;
SELECT CAST('2017-01-13' AS DATE);
SELECT CONVERT(DATE,'2017-01-13'); 
Run Code Online (Sandbox Code Playgroud)

但是现在检查一下 DATETIME

--No problem here:
SET LANGUAGE ENGLISH;
DECLARE @dt DATETIME='2017-01-13'; 
SELECT @dt;
SELECT CAST('2017-01-13' …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server datetime casting date

6
推荐指数
1
解决办法
803
查看次数

使用PowerShell在客户的计算机上部署SSRS报告

我们正在本地开发一些报告.这些报告将安装在客户的计算机上.但是我们无法在线访问这台机器.

到目前为止我管理的内容:

一个文件夹包含:

此脚本将在ReportServer中创建所有需要的文件夹,加载数据源,然后加载数据集,最后加载报告.这工作,我可以打开门户网站,可以看到我的对象.

更新:

下载的rdl文件将其数据集引用设置为普通数据集的名称 - 为什么......我花了几个小时才发现,引用必须包含数据集的完整(内部)路径...现在分页报道确实有效,heureka!

问题

这不起作用

  • 移动报告(又称仪表板,但不是PowerBI)
  • 我们的品牌档案

如何通过PowerShell上传移动报告?
如何上传自定义品牌包?
有更好的方法吗?我是PowerShell的新手,因此可以接受任何建议!TIA

编辑

删除了脚本片段,因为我自己发布了一个全面的答案...

更新:还没有答案?

在我自己的答案的底部有一些悬而未决的问题......我很乐意给予某人赏金,但它似乎丢失了......无论如何:如果Anybode可能至少回答剩下的一些开放问题,那么就有了150分的好机会:-)

sql-server deployment powershell reporting-services ssrs-2017

6
推荐指数
1
解决办法
1849
查看次数