我正在使用SQL Server 2012,我将创建一个存储过程,它从一个变量中的表中复制一个列,有没有人可以告诉我这个代码有什么错误?
alter Procedure Id_Fetch
@Col varchar(50)=null,
@Table VARCHAR(50)=Null,
@OrdrBy Varchar(40)=null
as
Begin
declare @TempCol nvarchar (100)
Exec(' SELECT '+@TempCol+' = '+@Col+' from ' + @Table +' order by '+@OrdrBy )
显示错误“'='
附近的语法错误答案 0 :(得分:0)
稍加修改......在你的选择中使用TOP 1,好像你选择了多个值,它会引发一个错误。
使用SYSNAME
数据类型作为列名和表名。
在对象名参数周围使用QUOTENAME()
函数,它在传递的参数值周围放置方括号[]
,并强制将其视为对象名称(防止Sql注入攻击)。
使用sp_executesql
代替EXEC
并将参数值连接到字符串中并再次执行可以防止Sql注入攻击。
ALTER PROCEDURE Id_Fetch
@Col SYSNAME,
@Table SYSNAME,
@OrdrBy SYSNAME,
@Col_Value NVARCHAR(100) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' SELECT TOP 1 @Col_Value = ' + QUOTENAME(@Col)
+ N' FROM ' + QUOTENAME(@Table)
+ N' ORDER BY ' + QUOTENAME(@OrdrBy)
EXECUTE sp_executesql @Sql
,N'@Col_Value NVARCHAR(100) OUTPUT'
,@Col_Value OUTPUT
END