Sql 将存储过程中的数据类型varchar转换为浮点时出错
我在论坛上尝试了很多方法,但都没有成功。我有一张叫“省”的桌子。此表中我要访问的参数列是手动输入的。可以看出,但我在标题中发现了错误。我的SQL代码如下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
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
,您调用了proctest
,并执行了test4
。您是否可以复制实际的代码,而不是您现在复制的代码?istanbu的值是多少l?您的数据中是否有空格?İstanbul的值是float type您缺少列_city周围的空格,这很容易受到sql注入的影响。请将设置行修改为:set@sql='选择QUOTENAME(''+@column_city+'')从远处看,city='+@city\u nextcellent。我个人的偏好是参数化动态sql并使用sp\u executesql。@SeanLange:-这里也一样。干杯!:)