我们有一个场景,我们需要在从 SQL Server 获取数据时修改输入字符串。
“TEST RATE CODE DESC TEST RATE CODE DESCTST TEST”并且C是“DESCTST”中的第47个字符,然后在单词的开头推入定界符。像“\DESCTST”
例如:
当前 => 测试速率代码 DESC 测试速率代码 DESCTST 测试\
必需 => 测试速率代码 DESC 测试速率代码 DESCTST \TEST
我们已经创建了一个 SQL 函数来实现这一点,除了示例中提到的向后操作外,一切正常。
这是我的 SQL 函数:
ALTER FUNCTION [dbo].[DescFormatter_New]
(
@InputString nvarchar(max),
@MaxLength int=0,
@CharPerLine int=0,
@NoOfLines int=0
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @ResultText nvarchar(max)
DECLARE @I INT
DECLARE @COUNT INT
IF(LEN(@InputString)<@CharPerLine)
BEGIN
SET @ResultText=@InputString
END
ELSE
BEGIN
set @InputString=LEFT(@InputString,@MaxLength)
SET @I = LEN(@InputString)/@CharPerLine
if((@I*@CharPerLine)<LEN(@InputString))
BEGIN
SET @I=@I+1
END
SET @COUNT …Run Code Online (Sandbox Code Playgroud) 我试图忽略来自 CTE 的重复行,但我无法做到这一点,似乎 CTE 不允许使用ROWNUM()变量到WHERE子句,因为它在尝试这样做时显示“无效的列名 'numrows' ”错误.
SELECT在 a 中使用时如何忽略重复的行CTE?
SQL查询:
DECLARE @BatchID uniqueidentifier = NEWID();
DECLARE @ClusterID SMALLINT = 1;
DECLARE @BatchSize integer = 20000;
DECLARE @myTableVariable TABLE(
EventID BIGINT,
HotelID int,
BatchStatus varchar(50),
BatchID uniqueidentifier);
WITH PendingExtResSvcEventsData_Batch AS (
SELECT TOP (@BatchSize) t.EventID, t.HotelID, t.BatchStatus, t.BatchID,
ROW_NUMBER() OVER (PARTITION BY t.EventID ORDER BY t.EventID) numrows
FROM ExtResSvcPendingMsg t WITH (NOLOCK)
WHERE t.ClusterID = @ClusterID
AND numrows = 1
-- Exclude …Run Code Online (Sandbox Code Playgroud)