Declare @convertname nvarchar(200)
Declare @i int
Declare @iValueConvertToString nvarchar(200)
Declare @tempSename nvarchar(200)
Declare @checkname int;
SET @i = 0
While(@i>=0)
BEGIN
@checkname=db0.fuctionabc (// this function check name is exist in record, if name is not exist it returns 0)
if(@checkname=0)
begin
--------- insert query ------------------
Break;
End
SET @i=@i+1;
SET @iValueConvertToString = CAST(@i AS varchar(10))
SET @tempSename = @Convertname + '-'+ @iValueConvertToString
SET @Convertname=@tempSename
END我喜欢这个结果
abc-1
abc-1-2
abc-1-2-3
abc-1-2-3-4但我想要的结果是
abc-1
abc-2
abc-3
abc-4在我的字符串连接逻辑中有什么要改变的?
我是sql的新手,请指导我。
发布于 2016-02-03 13:50:04
这会对你有帮助
DECLARE @i int = 1;
DECLARE @val nvarchar(99) = 'abc';
While(@i<= 5)
BEGIN
PRINT @val + '-'+ cast(@i AS VARCHAR)
SET @i=@i+1;
END发布于 2016-02-03 13:51:36
这样的东西对你有用吗?:
SET @i = 0
WHILE(@i <= 5)
BEGIN
SET @i=@i+1;
SET @iValueConvertToString = CAST(@i AS varchar(10))
SET @output = @Convertname + '-'+ @iValueConvertToString
PRINT @output;
END您原本打算在WHILE循环中将@Convertname作为常量使用,但您在每次迭代时都将其连接起来。使用单独的变量进行显示可避免此问题。
发布于 2016-02-03 14:09:51
你可以在没有循环的情况下做到这一点。下面是一种使用Tally Table的方法
DECLARE @convertname NVARCHAR(200) = 'abc'
DECLARE @limit INT = 5
;WITH E1(N) AS( -- 10 ^ 1 = 10 rows
SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows
CteTally(N) AS(
SELECT TOP(@limit) ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
FROM E4
)
SELECT *, @convertname + '-' + CAST(N AS VARCHAR(10))
FROM CteTallyhttps://stackoverflow.com/questions/35169385
复制相似问题