需要解决方案来解决从数据库中获取字符串并替换参数。
以下是我过去了解更多的示例查询:
--Create Table Table1
--(
--Id int primary key identity(1,1),
--Data varchar(max)
--)
--Create Table Table2
--(
--Id int primary key identity(1,1),
--SampleData varchar(max)
--)
Delete From Table1
GO
Delete From Table2
Go
insert into Table2 (SampleData) values ('How r u ''+@i+''. ')
Declare @i int = 100
Declare @TempSampleData varchar(max) = NULL
While(@i > 0)
begin
Set @TempSampleData = (select SampleData from Table2)
insert into Table1 (Data ) values (@TempSampleData)
insert into Table1 (Data) values ('How r u '+Cast(@i as varchar(500))+'.')
set @i = @i - 1
End
- 输出
Id Data
103 How r u '+@i+'. --Needed output here is How r u 100.
104 How r u 100.
105 How r u '+@i+'.
106 How r u 99.
107 How r u '+@i+'.
108 How r u 98.
109 How r u '+@i+'.
110 How r u 97.
111 How r u '+@i+'.
答案 0 :(得分:2)
你的循环中有这样的事情:
INSERT INTO Table1 (Data)
SELECT REPLACE(SampleData, '@i', CAST(@i AS VARCHAR(500)))
FROM Table2
答案 1 :(得分:0)
第一个INSERT在表中放置一个常量字符串:
insert into Table2 (SampleData) values ('How r u ''+@i+''. ')
其中恰好有一个@
,还有几个单引号(每个都用两个单引号表示),但字符串只是:
How r u '+@i'.
以后做的时候:
Set @TempSampleData = (select SampleData from Table2)
insert into Table1 (Data ) values (@TempSampleData)
这需要直接复制Table2中的值并将其复制到Table1中。没有对字符串进行评估;不应该对字符串进行任何评估。我甚至不确定是否有办法对字符串进行评估 - 如果可能的话,它可能需要更多的引号来产生有效的值。
其他INSERT操作不同:
insert into Table1 (Data) values ('How r u '+Cast(@i as varchar(500))+'.')
这里,在执行语句时评估要插入的字符串。它将变量i
的当前值转换为字符串,并将其与其他两个字符串片段连接。