小编Rah*_*awe的帖子

向字符串添加行尾标记

我们有一个场景,我们需要在从 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)

sql-server-2008 sql-server

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

如何忽略 CTE Select 语句中的重复行?

我试图忽略来自 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)

sql-server t-sql

-2
推荐指数
1
解决办法
1264
查看次数

标签 统计

sql-server ×2

sql-server-2008 ×1

t-sql ×1