【发布时间】:2019-07-05 11:50:18
【问题描述】:
真的把我的头搞砸了,就像许多 sql 搞砸一样,我知道这可能是愚蠢和愚蠢的,但我似乎无法让它工作。
我有一个存储过程是这样的..
ALTER PROCEDURE [dbo].[RETURN_DATA](@TABLE_param VARCHAR(7),@COUNTRY_param VARCHAR(2),@FILEDATE_param int,@TTKT_param VARCHAR(6))
AS
BEGIN
SET NOCOUNT ON;
SELECT @SQL = 'Select * from ' + @TABLE_param + ' WHERE COUNTRY = ' + @COUNTRY_param + ' AND MONTH(Fil_Dte) = ' + cast(@FILEDATE_param as varchar(20)) + ' AND TRNN = '+ @TKTT_param
EXECUTE(@SQL)
END
我在 vb.net windows 窗体应用程序中使用它,因此在那里应用参数。但是试图用这个在 SSMS 中运行它
exec RETURN_DATA @COUNTRY_param='GB',@FILEDATE_param=4,@TABLE_param='table30',@TTKT_param='000000'
返回错误
Invalid column name 'GB'. 我觉得很奇怪,因为我从未调用名为 GB 的列,而是在 where 子句中的 COUNTRY 列中调用 GB 的行?
我知道这希望是一个简单的修复,所以任何帮助将不胜感激,即使您认为有更好的方法来编写 SP!
提前谢谢各位。
【问题讨论】:
-
提示:打印出 SQL 而不是执行它,您应该会立即看到问题...
-
提示 2:这种生成 SQL 的方法非常容易受到 SQL 注入攻击。
-
我建议参数化 SQL 否则你应该正确处理转义引号
-
相关...xkcd.com/327
标签: sql-server stored-procedures ssms