如何以编程方式将数据连接到 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 ║
╚═══════╩════════════╝
我们正在使用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 ║
╚═══════╩════════════╝