我知道它确实考虑过'' NULL
,但这并没有太多告诉我为什么会这样.据我所知,SQL规范''与NULL
- 不一样- 一个是有效数据,另一个是缺少相同的信息.
随意推测,但请说明是否是这种情况.如果甲骨文的任何人都能评论它,那就太棒了!
我一直在使用这一段时间:
SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col))
Run Code Online (Sandbox Code Playgroud)
但是最近,我发现所有"0"字符的列都有问题,例如'00000000',因为它永远找不到匹配的非"0"字符.
我见过的另一种技术是使用TRIM
:
REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0')
Run Code Online (Sandbox Code Playgroud)
如果存在嵌入空格,则会出现问题,因为当空格变回"0"时,它们将变为"0".
我试图避免使用标量UDF.我在SQL Server 2005中发现了很多UDF的性能问题.
我在SSIS中有一个项目,并且我添加了一个执行SQL任务,它将结果发送给变量.我想确认该值,因为我担心它会尝试将其写为结果集对象而不是实际整数(在这种情况下,我将返回COUNT).
我的第一个想法是在调试模式下运行它并将全局变量添加到我的Watch窗口.不幸的是,当我右键单击Watch窗口时,"Add Variable"选项显示为灰色.我在这里错过了什么?
我已经开始确认我的变量设置正确,所以我对像脚本放入一个带有值或其他类似的MsgBox的方法不感兴趣.为了将来参考,我希望能够在调试模式下观察变量.如果对此存在某种限制,那么我想知道如果有人知道的话,这一切是什么以及为什么.
这个和每个"教程"的帮助是非常不合适的,我只能说,"将变量添加到Watch窗口并进行调试",好像这样做一定不会有问题.
感谢您的任何见解!
MS SQL有一个方便的解决方法,用于将多行的列值连接成一个值:
SELECT col1
FROM table1
WHERE col2 = 'x'
ORDER by col3
FOR XML path('')
Run Code Online (Sandbox Code Playgroud)
并返回一个很好的记录集:
XML_F52E2B61-18A1-11d1-B105-00805F49916B
----------------------------------------
<col1>Foo</col1><col1>Bar</col1>
Run Code Online (Sandbox Code Playgroud)
只返回记录集中的列名是相当讨厌的!
列名似乎包含随机元素(或GUID),因此我不愿意在我的应用程序中使用它(不同的实例或不同的服务器可能有另一个GUID).不幸的是我无法使用*来选择值,并且由于现有应用程序中的限制,我无法迭代返回的列,或者......
有没有办法强制返回的记录集中的列名更合理?
在SQL Server 2005中,我试图查询varchar(MAX)列,其中包含一些文本数据超过8192的行.但是,在管理工作室中,我有工具 - >选项 - >查询结果 - >结果到文本 - >每列中显示的最大字符数= 8192,这是最大值.因此,看起来这些行的截断仅仅是由于文本输出所施加的限制.
我唯一能看到的就是使用SUBSTRING函数来获取前8000个字符,然后是接下来的8000个字符等等.但这很丑陋且容易出错.
我应该提一下,SSIS和BCP不是我的选择.
有人有更好的建议吗?谢谢!
是否可以在单个选择中更新多个局部变量?
就像是:
set
@variableOne = avg(someColumn),
@variableTwo = avg(otherColumn)
from tblTable
Run Code Online (Sandbox Code Playgroud)
对于像这项任务一样简单的事情,做两个单独的选择操作似乎有点浪费:
set @variableOne = ( select avg(someColumn) from tblTable )
set @variableTwo = ( select avg(otherColumn) from tblTable )
Run Code Online (Sandbox Code Playgroud) 出于某种原因,过去的人不使用sequence.NEXTVAL插入数据.因此,当我使用sequence.NEXTVAL来填充表时,我得到了PK违规,因为该数字已在表中使用.
如何更新下一个值以使其可用?现在,我只是一遍又一遍地插入,直到它成功(INSERT INTO tbl (pk) VALUES (sequence.NEXTVAL)
),然后同步下一个.
当我将列类型从int更改为real时,为什么SQL 2008突然想要删除我的表?据我所知,这在SQL 2005中从未发生过.任何见解都会有所帮助.
我想基于一个简单的标准更新一组行,并获取已更改的PK列表.我以为我可以做这样的事情,但我担心可能的并发问题:
SELECT Id FROM Table1 WHERE AlertDate IS NULL;
UPDATE Table1 SET AlertDate = getutcdate() WHERE AlertDate IS NULL;
Run Code Online (Sandbox Code Playgroud)
如果包含在事务中,是否存在可能发生的并发问题?或者有更好的方法吗?
sql ×8
sql-server ×7
t-sql ×4
oracle ×2
string ×2
column-types ×1
debugging ×1
null ×1
oracle10g ×1
primary-key ×1
sequence ×1
ssis ×1
truncation ×1
watch ×1
xml ×1