您的位置:首页 > 数据库

SQL动态执行存储过程

2013-03-19 00:04 232 查看
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Kenshin Cui
-- Create date: 2010.11.20
-- Description: Based on the specified table and column returns the query data
-- =============================================
CREATE PROCEDURE GetQueryDataByTableNameAndColumns
@tableName NVARCHAR(20),
@columns NVARCHAR(200)
AS
BEGIN
DECLARE @sql NVARCHAR(500)
SET @sql='SELECT '+@columns+' FROM '+@tableName
EXEC (@sql)
END
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Kenshin Cui
-- Create date: 2010.11.20
-- Description: Based on the specified table and column returns the query data
-- =============================================
CREATE PROCEDURE GetQueryDataByTableNameAndColumns2
@tableName NVARCHAR(20),
@columns NVARCHAR(200)
AS
BEGIN
DECLARE @sql NVARCHAR(500)
SET @sql='SELECT '+@columns+' FROM '+@tableName
EXEC sys.sp_executesql @sql
END
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Kenshin Cui
-- Create date: 2010.11.20
-- Description: By specifying the table name and column names to return the maximum value
-- =============================================
CREATE PROCEDURE GetMaxValueByTableNameAndColumns
@tableName NVARCHAR(20),
@columnName NVARCHAR(200)
AS
BEGIN
DECLARE @sql NVARCHAR(500)
DECLARE @outputParamDefine NVARCHAR(100)
DECLARE @maxValue NVARCHAR(50)
SET @sql='SELECT @maxValue=MAX('+@columnName+') FROM '+@tableName
SET @outputParamDefine='@maxValue NVARCHAR(50) OUTPUT'
EXEC sys.sp_executesql @sql,@outputParamDefine,@maxValue OUTPUT
SELECT @maxValue
END
GO

DECLARE @tableName NVARCHAR(20)
DECLARE @columns NVARCHAR(200)
DECLARE @sql NVARCHAR(500)--当使用sp_executesql执行时不能是VARCHAR(500)
SET @tableName='Products'
SET @columns='ProductName,UnitPrice'
SET @sql=N'SELECT '+@columns+' FROM '+@tableName
EXEC (@sql)                                                         --正确!!!
EXEC ('SELECT '+@columns+' FROM '+@tableName)                       --正确!!!
EXEC sys.sp_executesql @sql                                         --正确!!!但是如果@sql定义成varchar类型此句就会出错
EXEC sys.sp_executesql N'SELECT ProductName,UnitPrice FROM Products'--正确!!!直接执行语句,语句前面必须加“N”
EXEC sys.sp_executesql N'SELECT '+@columns+' FROM '+@tableName      --错误!!!不能执行sql拼接,即使前面加N



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: