如何以编程方式将数据连接到 SQL 服务器列以匹配 max_value?

How to programmatically concat data into SQL Server columns to match the max_value?

我们正在使用STUFF将数据插入到table,调整过程中的一些列用CASE改变数据的语句来满足数据测试的特定需要.

是否有类似的方法可以在插入时向列添加额外数据,而无需提前知道列中还剩下 space 什么?

因此,如果我找到长度为 15 的列 First_Name 并且我要插入的行的名称为 John 如何使插入看起来像 JohnAAAAAAAAAAAA 同时还处理名称可能是的情况史蒂夫和我想让 A 填满剩余的 space。

我认为从 sys.columns 获取 max_length 并知道现有值的索引(可能使用 PATINDEX),我可以以某种方式添加所需的数据来填充 space.

我建议使用 REPLICATE()LEN() 函数,如下所示:

DECLARE @Table TABLE (NAME VARCHAR(15))

INSERT INTO @Table (Name) VALUES ('John')
INSERT INTO @Table (Name) VALUES ('Jeremiah')
INSERT INTO @Table (Name) VALUES ('Jehosaphat')

SELECT 
    Name,
    Name + REPLICATE('A', 15-LEN(Name))
FROM @Table 

另一个示例是使用 LEFT() 函数来确定返回字符串的大小,该字符串由您的值和连接的文本组成。这是一种方法,这次在 INSERT 方面:

DECLARE @Table TABLE (NAME VARCHAR(15))

INSERT INTO @Table (Name) (SELECT LEFT('John' + REPLICATE('A', 15), 15))
INSERT INTO @Table (Name) (SELECT LEFT('Jeremiah' + REPLICATE('A', 15), 15))
INSERT INTO @Table (Name) (SELECT LEFT('Jehosaphat' + REPLICATE('A', 15), 15))

SELECT 
    Name 
FROM @Table 

编辑 1: 下面的代码将在插入后更新您的数据 - 因为在您加载所有记录之前您逻辑上不会知道最大长度是多少,所以我插入名称然后在事后返回更新它们。

-- Prepare data
DECLARE @Table TABLE (NAME VARCHAR(50))
INSERT INTO @Table VALUES ('John'), ('Jeremiah'), ('Jehoshephat'), ('John Jacob Jingleheimer Schmidt')

-- Check it: a set of names with varying values
SELECT Name 
FROM @Table 

-- Determine and store the maximum character length
DECLARE @MaxLen INT
SET @MaxLen = (SELECT MAX(LEN(NAME)) FROM @Table)

-- update each record to pad with 'A' until the maximum character length is reached
UPDATE @Table
SET NAME = NAME + REPLICATE('A', @MaxLen - LEN(NAME))

-- Confirm it works as expected
SELECT * 
FROM @Table

你可以显式地附加一个填充,然后使用左函数来获得所需的长度,而不是使用东西,就像这样....

DECLARE @T TABLE (Name VARCHAR(10))

INSERT INTO @T VALUES ('John'),('Steve')

SELECT Name 
      ,NameNew = LEFT(Name + 'AAAAAAAAAA',10)
FROM @T



RESULT:

╔═══════╦════════════╗
║ Name  ║  NameNew   ║
╠═══════╬════════════╣
║ John  ║ JohnAAAAAA ║
║ Steve ║ SteveAAAAA ║
╚═══════╩════════════╝