包含数据库列的参数和包含参数的直接字符串之间有什么区别?

时间:2012-03-02 15:14:21

标签: sql

需要解决方案来解决从数据库中获取字符串并替换参数。

以下是我过去了解更多的示例查询:

--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+'. 

2 个答案:

答案 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的当前值转换为字符串,并将其与其他两个字符串片段连接。