简体   繁体   English

sql 语法错误(= 附近的语法不正确)

[英]sql syntax error (incorrect syntax near =)

Hello I am having a problem here.您好,我在这里遇到问题。 I wanted to read subjectname from a dynamic table name and the save it to a variable.我想从动态表名中读取 subjectname 并将其保存到变量中。 but i am getting an error但我收到一个错误

DECLARE @retval varchar(200)   
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @academicYear varchar(200) = '20212022';
Declare @subjectId varchar(200) = '202041962';

DECLARE @tablename nvarchar(50)   = 'abc' + CAST(@academicyear As varchar)
DECLARE @CONDITION NVARCHAR(128)
SET @CONDITION = 'WHERE [subjectid] = 202041962'

SELECT @sSQL = N'SELECT @retvalOUT = [subjectname] FROM ' + @tablename + @CONDITION;  
SET @ParmDefinition = N'@retvalOUT varchar OUTPUT';

EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;

SELECT @retval;

If you actually looked at the value of @sSQL eg by print ing it, you'll note it contains FROM abc20212022WHERE , therefore,如果您实际查看@sSQL的值,例如通过print它,您会注意到它包含FROM abc20212022WHERE ,因此,

  1. you are not delimiting your table names - use quotename()你没有分隔你的表名 - 使用quotename()

  2. you need a space between your table name and the where您的表名和where之间需要一个空格

  3. you should always specify a length for a varchar value (you don't need to cast a variable when concatenating two strings but you should be consistent with your use of [n]varchar)您应该始终为varchar值指定一个长度(连接两个字符串时不需要转换变量,但您应该与 [n]varchar 的使用保持一致

  4. using concat to concatenate strings is easier and safer使用concat连接字符串更简单、更安全

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM