我创建了一个存储过程,它有几个选择语句,最后一个条件在@command内。因为我在 C# 中运行它。
CREATE PROCEDURE [dbo].[SearchList]
@command varchar(2000)
AS
BEGIN
SELECT *
FROM XYZ + CONVERT(varchar(2000), @command)
END
我不断收到错误
将 varchar 值"按 ID 排序"转换为数据类型 int 时转换失败
DECLARE @return_value int
EXEC @return_value = [dbo].[SearchList]
@command = N' ORDER BY Id DESC'
SELECT 'Return Value' = @return_value
GO
输出返回一个列表,然后将其绑定到网格中。
您可以尝试以下解决方案
CREATE PROCEDURE SPName( @ColumnName varchar(100) ) AS
begin
SELECT * FROM XYZ
ORDER BY
CASE WHEN @ColumnName='COl1' THEN @ColumnName
WHEN @ColumnName='COl2' THEN @ColumnName
WHEN @ColumnName='COl3' THEN @ColumnName
END
方法2
CREATE PROCEDURE SPName( @ColumnName varchar(100) ) AS
begin
SELECT * FROM XYZ
where 1=1 AND ( COL1= @ColumnName or isnull(@ColumnName ,'')='')
end
或者对 Where 子句和排序依据使用两个单独的变量,并使用上述组合
不能混合使用动态 SQL 和常规 SQL。 你需要使整个事情动态SQL:
create Procedure [dbo].[SearchList] @command nvarchar(max)
as begin
declare @sql nvarchar(max);
set @sql = N'
select *
from XYZ
' + @command;
exec sp_executesql @sql;
end;