计划使用:
例如 :
tableName = TableCustomers
column1 = UserName
column2 = UserMail
-- SP name ......and as zero will select all *, 'firstColName'....
SelectFromGivenTableWithOptionalGivenColumn, 0, 'UserName', '', 'AnyUserName', ''
SSMS
或者更好地从生成的执行脚本中复制
USE [KwPos]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[SelectFromGivenTableWithOptionalGivenColumns]
@tableName = 'TableCustomers',
@zeroForAllTable = 0,
@Column = 'UserName',
@Column2 = '',
@ColVal = 'AnyUserName',
@ColVal2 = ''
错误
Invalid column name 'AnyUserName'.
这是 SP 的 SQL(尝试使用SysName
&列的两个名称nvarchar
导致相同的错误)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SelectFromGivenTableWithOptionalGivenColumns]
@tableName sysname ='',
@zeroForAllTable bit = 0,
@Column sysname = '',
@Column2 sysname = '',
@ColVal varchar(111) = '',
@ColVal2 varchar(111) = ''
AS
BEGIN
SET NOCOUNT ON;
declare @q varchar(1000)
if(@zeroForAllTable !=0)
begin
if(@Column !='' AND @Column2 !='')
begin
if(@Column != '' AND @ColVal !='' AND @Column2 != '' AND @ColVal2 !='')
begin
set @q= 'SELECT ' + @Column + ' FROM ' + @tableName + ' where ' + @Column + ' = ' + @ColVal + ' AND ' + @Column2 + ' = ' + @ColVal2;
end
else if(@Column !='' AND @ColVal ='')
begin
set @q = 'SELECT '+ @Column +' FROM ' + @tableName;
end
end
else
if(@Column !='' AND @Column = '')
begin
if(@Column != '' AND @ColVal !='')
begin
set @q= 'SELECT ' + @Column + ' FROM ' + @tableName + ' where ' + @Column + ' = ' + @ColVal;
end
else if(@Column !='' AND @ColVal ='')
begin
set @q = 'SELECT '+ @Column + ' FROM ' + @tableName;
end
end
end
else
begin
if(@Column !='' AND @Column2 !='')
begin
if(@Column != '' AND @ColVal !='')
begin
set @q= 'SELECT * FROM ' + @tableName + ' where ' + @Column+ ' = ' + @ColVal + ' AND ' + @Column2 + ' = ' + @ColVal2;
end
else if(@Column !='' AND @ColVal ='')
begin
set @q = 'SELECT * FROM ' + @tableName;
end
end
else
if(@Column !='' AND @Column2 = '')
begin
if(@Column != '' AND @ColVal !='')
begin
set @q= 'SELECT * FROM ' + @tableName + ' where ' + @Column + ' = ' + @ColVal;
end
else if(@Column !='' AND @ColVal ='')
begin
set @q = 'SELECT * FROM ' + @tableName;
end
else
begin
set @q = 'SELECT * FROM ' + @tableName;
end
end
end
exec (@q)
END
GO