Sql 将存储过程中的数据类型varchar转换为浮点时出错

Sql 将存储过程中的数据类型varchar转换为浮点时出错,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我在论坛上尝试了很多方法,但都没有成功。我有一张叫“省”的桌子。此表中我要访问的参数列是手动输入的。可以看出,但我在标题中发现了错误。我的SQL代码如下 create proc test ( @column_city varchar (500), @city_n varchar (500) ) as begin declare @sql nvarchar (1000) set @sql = 'SELECT' + @ column_city + 'FROM a distance wh

我在论坛上尝试了很多方法,但都没有成功。我有一张叫“省”的桌子。此表中我要访问的参数列是手动输入的。可以看出,但我在标题中发现了错误。我的SQL代码如下

create proc test 
(
@column_city varchar (500), 
@city_n varchar (500) 
) 
as 
begin 
declare @sql nvarchar (1000) 
set @sql = 'SELECT' + @ column_city + 'FROM a distance where city =' +city_n
exec (sql) 
end 

exec test "istanbul", "chicago" 
当我运行上述代码“Msg 8114,16级,状态5,第1行 将数据类型varchar转换为float时出错。“我收到一个错误

伊斯坦布尔是一列的名字。发送到安卡拉市的列是值。将计算距离的两个城市。通常,当我编写sql查询时,它正在运行。发送到伊斯坦布尔,我重视我的写作目标,并将提供工作

select istanbul from distance
where CITY_NAME = 'ankara' 

我一直在描述

您的查询在语法上不正确。试试这个:

create proc test 
(
@column_city varchar (500), 
@city_n varchar (500) 
) 
as 
begin 
declare @sql nvarchar (1000) 
set @ sql = 'SELECT QUOTENAME(''' + @ column_city + ''') FROM distance where city =' +@ city_n 
exec (@sql) 
end 
然后你需要像这样执行它:

exec test 'istanbul', 'chicago' 

这个问题有太多的错误,令人难以置信。SQL不能识别双引号(
”),但您可以对文本字符串使用单引号(
)(您在
SET@SQL='SELECT
”中做得很好,但在
EXEC
行中没有)。您还需要为变量名添加一个
@
。即
@column\u city
@sql
,而不是
column\u city
@sql
,您调用了proc
test
,并执行了
test4
。您是否可以复制实际的代码,而不是您现在复制的代码?istanbu的值是多少l?您的数据中是否有空格?İstanbul的值是float type您缺少列_city周围的空格,这很容易受到sql注入的影响。请将设置行修改为:set@sql='选择QUOTENAME(''+@column_city+'')从远处看,city='+@city\u nextcellent。我个人的偏好是参数化动态sql并使用sp\u executesql。@SeanLange:-这里也一样。干杯!:)