我需要根据几个条件更改 select 语句中的返回值。我试过这样的事情:
,CASE i.DocValue
WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal
ELSE 0
END as Value
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用以及推荐的方法是什么?接下来会有几个 WHEN 条件。
谢谢
我在表列中有这种类型的值
154646@8@486
45465@6464@654
Run Code Online (Sandbox Code Playgroud)
等等。
如何在第二个@ 字符后删除所有内容?我需要显示
154646@8
45465@6464
Run Code Online (Sandbox Code Playgroud)
我只能为所有@ 做,但不能为第二个做
SELECT REPLACE(LEFT('45@Tra@lala', CHARINDEX('@','45@Tra@lala')-1),'_',' ')
Run Code Online (Sandbox Code Playgroud)
返回45但不返回45@Tra
谢谢 :-)
我有这个:
SELECT
A
,B
,dbo.Func(C)
,dbo.Func(D)
,dbo.Func(E)
,F
FROM abcdef
WHERE
0 = dbo.Func(C) + dbo.Func(D)
Run Code Online (Sandbox Code Playgroud)
我读过这不是一个好的做法,因为该函数被调用了数百万次并且对性能产生了不良影响。
我试图用 CROSS APPLY 重写它:
SELECT *
FROM abcdef
CROSS APPLY dbo.Func(D) as FD
Run Code Online (Sandbox Code Playgroud)
但它返回此错误:
Invalid object name 'dbo.Func'
Run Code Online (Sandbox Code Playgroud)
我可以只在 TABLE VALUED 函数上使用 CROSS APPLY 吗?
CROSS APPLY 是否适用于标量函数(转换为表值函数)?因为在我的小型性能测试中,CROSS APPLY 有点慢。
T-SQL Debugger 的默认端口是 135,是否可以更改此端口?在我的公司中,此端口位于禁止端口的特殊列表中,因此我们需要在另一个端口号上打开该服务。
我正在关注这篇文章:
用于 SQL Server 2008 的 Transact-SQL 调试器——Bill Ramos 的第 2 部分
我在 SSDT 中有 CLR 程序集,并且部署它必须是可信的。据我所知,有 4 个选项如何做到这一点
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
ALTER DATABASE SourceDatabase SET TRUSTWORTHY ON;
Run Code Online (Sandbox Code Playgroud)
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'clr strict security', 0;
RECONFIGURE;
Run Code Online (Sandbox Code Playgroud)
Seems complicated and I was not able to manage that yet. I will appreciate the instructions, because the workflow is not clear here.
Run Code Online (Sandbox Code Playgroud)
sp_add_trusted_assemblyEXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
declare @assembly varbinary(max) = 0x4D5A90000300000004000000FFFF0000... -- …Run Code Online (Sandbox Code Playgroud) 我可以查询 XML,它定义了带有公共表表达式的xmlns标记
DECLARE @XML XML
SET @XML =
'<NodeA xmlns="https://XYZ.xsd">
<NodeB verzePis="">
<NodeC1 attrA="Hello" />
<NodeC2 attrA="World" />
</NodeB>
</NodeA>
'
;WITH XMLNAMESPACES(DEFAULT 'https://XYZ.xsd')
SELECT
r.value('fn:local-name(.)', 'nvarchar(50)') as SectionName,
r.value('@attrA','NVARCHAR(250)') attrA
FROM @XML.nodes('/NodeA/NodeB/*') AS t(r);
Run Code Online (Sandbox Code Playgroud)
但是如果源 XML 不包含任何 xmlns 标记呢?如何解决缺少命名空间的问题?
我有以下 CLR 存储过程,该过程在此命令上引发错误
xmlDoc.LoadXml(inputXml);
Run Code Online (Sandbox Code Playgroud)
代码
public static int spGetTaxOfficeXML(SqlXml _inputXml)
{
// this procedure rename Row elements name with NodeName attribute value
string inputXml = _inputXml.ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(inputXml);
// procedure Logic
SqlContext.Pipe.Send(inputXml);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当 XML 文本作为文本位于 Visual Studio 内的变量内部时,效果很好。但是当我将代码作为 CLR 上传到 SQL Server 并尝试从 SQL Management Studio 执行它时:
DECLARE @XML XML
SET @XML = '<NodeA><NodeB></NodeB><NodeC AttributeX=""><Row NodeName="RowA" AttributeA="" AttributeB="abcd" AttributeC="efgh" /><Row NodeName="RowB" AttributeA="wxyz" /><Row NodeName="RowC" AttributeB="qwer" AttributeC="tyui" /><Row NodeName="RowD" AttributeA="stuv" AttributeB="erty" AttributeC="fghj" /></NodeC></NodeA>'
EXEC …Run Code Online (Sandbox Code Playgroud) 我有两个与链接服务器连接的 SQL Server 2016。当我sys.dm_exec_describe_first_result_set从远程服务器查询时,它返回列表的数字数据类型而不是十进制。
第一个查询(从远程服务器执行)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from LinkedServerFoo.DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Run Code Online (Sandbox Code Playgroud)
第二个查询(从sql server执行)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Run Code Online (Sandbox Code Playgroud)
结果
这对我来说是一个问题,因为我根据这些查询的输出来比较数据类型。
知道可能出现什么问题吗?为什么会这样以及如何解决?
smalldatetimewhere sys 表错误返回也存在同样的问题datetimesql-server ×6
sql-clr ×2
xml ×2
c# ×1
cross-apply ×1
debugging ×1
deployment ×1
ssdt ×1
t-sql ×1