2017-04-11 90 views
0
declare @sum as nvarchar(20) = 'sum(Salary)' 

select @sum from Employee 

我想做这样的事情。我需要将我的sql查询部分存储在变量中,并在sql查询中使用该变量。它有可能以任何方式?我可以在SQL Server中做这样的事吗?

+1

你可能想看看[动态SQL](https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql -commands-in-sql-server /) – kman

+1

您可以使用'EXEC'或'sp_execute_sql'。它被称为动态SQL。这通常是一个坏主意。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql http://stackoverflow.com/questions/548090/dynamic-sql-execsql-versus-exec -sp -execesqlsql –

+0

@ Nick.McDermaid我不会说它是一个坏主意......它只是你的腰带上的另一种工具,并且多次拯救了这一天。 –

回答

1

SQL Server不支持宏替换。但它确实允许使用DYNAMIC SQL。下面是一个简单的例子

declare @sum as nvarchar(20) = 'sum(Salary)' 

Declare @SQL varchar(max) = 'select '[email protected]+' from Employee' 
Exec(@SQL) 

现在,很明显,存在SQL注入的风险。采取偷看在http://bobby-tables.com/

-1

ID 'SUM(工资)' 是这样的,那么它应该返回

declare @sum as nvarchar(20) = 'sum(Salary)' 

结果的文本字符串

总和(工资)

结果

但是如果像:

declare @sum as nvarchar(20) 
select @sum = sum(Salary),column1,..and so on from your table 

那么它应该从你的函数返回一个结果

+0

这不会以任何方式回答OP问题。 – Arvo

0
YOU CAN USE DYNAMIC QUERY 

    BEGIN TRAN 

    DECLARE @sum NVARCHAR(20) = 'sum(Salary)',@SQL VARCHAR(4000) 
    SET @SQL='' 
    SET @SQL = @SQL + 'SELECT '[email protected]+' FROM Employee' 
    PRINT @SQL 
    EXEC(@SQL) 

    ROLLBACK TRAN