sql - 为什么这个动态 SQL 语句会失败?

标签 sql sql-server

这没有任何问题:

select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE 
from [AdventureWorks2012].INFORMATION_SCHEMA.COLUMNS WHERE table_name='employee';

但是,当它移动到动态语句时,它总是失败:

begin
DECLARE @sqlstatement VARCHAR(MAX);
DECLARE @TableName varchar(max)='employee';

set @sqlstatement='select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE
from [AdventureWorks2012].INFORMATION_SCHEMA.COLUMNS WHERE table_name='+@TableName;
print (@sqlstatement);
EXECUTE(@sqlstatement);

end

错误说:无效的列名'employee'

最佳答案

你应该用单引号把它包起来,因为 table_name 列是字符串,

set @sqlstatement='select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE
from [AdventureWorks2012].INFORMATION_SCHEMA.COLUMNS WHERE table_name='''+@TableName+'''';

关于sql - 为什么这个动态 SQL 语句会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16908027/

相关文章:

SQL Server SELECT STUFF 返回错误值

sql-server - 如何使用 SELECT DISTINCT 指定特定的自定义顺序

sql-server - 出现错误时退出并回滚脚本中的所有内容

SQL 查询从列中提取文本并将其存储到同一记录中的不同列

MySql 内连接顺序

sql - 与选择顶部相反

mysql - 从一张表中获取不同的行和*

sql - SQL 标准与 T-SQL 扩展的性能

mysql - 如何在 SELECT 中标记表?

sql - 对于具有较大 Id 的行,是否使用 DBCC CHECKIDENT 安全重置主键