我正在尝试在SQL中编写执行以下操作的存储过程
代码如下:
ALTER PROCEDURE [dbo].[chartmilldata]
-- Add the parameters for the stored procedure here
(@BatchType nvarchar (50),
@Data nvarchar(50))
AS
BEGIN
-- Insert statements for procedure here
SELECT BatchDate,@Data FROM --Database-- WHERE BatchType = @BatchType
END
我正在尝试根据操作员输入从数据库中选择列。但我没有得到输出。如果有人可以给我一个方向,那就太好了。
答案 0 :(得分:0)
您可能希望将SELECT
语句构建为字符串,然后使用sp_executesql
执行它。
有关详细信息,请参阅此页面: https://msdn.microsoft.com/en-us/library/ms188001.aspx
这将允许您通过变量将查询设置为替换列名,然后执行语句。务必确保您的输入消毒!
答案 1 :(得分:0)
你需要使用动态SQL, HOWEVER 我不推荐这个解决方案,我不认为我可以添加任何内容,为什么我不推荐它不是'在The Curse and Blessings of Dynamic SQL中,在Erland Sommarskog中解释得更好。
尽管如此,如果 在存储过程中执行此操作,您可以使用以下内容:
FrameLayout toggleView = (FrameLayout) v;
toggleView.bringToFront();
toggleView.requestLayout();
toggleView.invalidate();
最好将输入参数ALTER PROCEDURE [dbo].[chartmilldata]
-- Add the parameters for the stored procedure here
(@BatchType nvarchar (50),
@Data nvarchar(50))
AS
BEGIN
-- DECLARE AND SET SQL TO EXECUTE
DECLARE @SQL NVARCHAR(MAX) = N'SELECT BatchDate = NULL, ' +
QUOTENAME(@Data) + N' = NULL;';
-- CHECK COLUMN IS VALID IN THE TABLE
IF EXISTS
( SELECT 1
FROM sys.columns
WHERE name = @Data
AND object_id = OBJECT_ID('dbo.YourTable', 'U')
)
BEGIN
SET @SQL = 'SELECT BatchDate, ' + QUOTENAME(@Data) +
' FROM dbo.YourTable WHERE BatchType = @BatchType;';
END
EXECUTE sp_executesql @SQL, N'@BatchType NVARCHAR(50)', @BatchType;
END
更改为@Data
(或别名NVARCHAR(128)
),因为这是列名的最大值。