精华内容
下载资源
问答
  • SqlServer中,用exec处理sql字符串中含有变量,提示:必须声明标量变量@(已解决!) 代码如下:declare @tssj nvarchar(100) — 外部变量declare @Sql_Sql nvarchar(100) — 存sql字符串变量 set @Sql_Sql =N’...
  • execsqlserver 提示找不到存储过程

    千次阅读 2017-07-17 11:45:00
    今天在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,很奇怪,每次都需要重新打开...

    今天在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,很奇怪,每次都需要重新打开ssms,红色 的波浪线提示才会取消!看到百度知道上有一个很好的解释是:
    原因是这样的.你的SQL Server 客户端, 在连接到 SQL Server 数据库以后。会自动读取 数据库的 数据字典信息。也就是 当前数据库,有哪些表/字段/视图/存储过程等基础信息。保存在客户端的内存里面。这样。当你在客户端输入 SQL 语句的时候,输入 表名字.会自动弹出 这个表的字段列表,让你选择。但是,当你新建了一个对象的时候, 例如表, 或者你的那个例子,是新建存储过程abc这个时候,数据库那里,已经有存储过程abc 了。但是客户端的缓存里面, 并没有 存储过程 abc 的信息。 因为内存里面的信息,没有更新。因此,在客户端那里。输入EXEC abc,abc下有红线。将 客户端关闭后,重新打开, 由于客户端 重新加载了 数据库的基础信息。知道了 当前数据库里面,有 一个名字叫 abc 的存储过程因此,就不出红线了。
    追问
    谢谢你的回答但是我的SQL SERVER 是安装的自己的电脑上的,数据库也存放在C盘的,为什么还要重新加载呢?我在公司用的SQL SERVER新增完了就能直接用了啊。
    回答

    SQL Server 的工作方式, 是 客户端 - 服务器 的工作方式.就算 SQL SERVER 是安装的自己的电脑上的,数据库也存放在C盘但是你的机器上,实际上是运行了 2 个程序,一个是服务器程序,一个是 客户端程序。客户端 新建了存储过程, 实际上是把SQL代码, 发送给服务器程序。服务器程序 编译代码的有效性,并存储。假如 编译通过了, 那是可以运行的, 不管你数据库存在本机,还是存在服务器上面。至于你本地的那个红线,实际上是 客户端的 本地的模拟的 编译。客户端不管你代码是否正确,都是 发送给服务器那里去执行的。因此你 abc下有红线,提示找不到存储过程“abc”而 又能使用EXEC abc这个就是 客户端 认为 服务器上面,没有 abc 这个存储过程。但是你执行 EXEC abc客户端 是只能原样的把这句话,发给服务器如果 服务器那里,真的没有 abc 这个存储过程那么会返回 服务器的 错误提示。如果服务器有 abc 这个存储过程那么就会返回执行的结果。

     

    原文 转 http://blog.sina.com.cn/s/blog_8e17040001012q26.html

    转载于:https://www.cnblogs.com/IWantPower/p/7193562.html

    展开全文
  • exec sql_EXEC SQL概述和示例

    千次阅读 2020-07-26 12:41:56
    In this article, we will review on EXEC SQL statement in SQL Server and explore a few examples. 在本文中,我们将回顾SQL Server中的EXEC SQL语句并探索一些示例。 The EXEC command is used to ...

    exec sql

    In this article, we will review on EXEC SQL statement in SQL Server and explore a few examples.

    在本文中,我们将回顾SQL Server中的EXEC SQL语句并探索一些示例。

    The EXEC command is used to execute a stored procedure, or a SQL string passed to it. You can also use full command EXECUTE which is the same as EXEC.

    EXEC命令用于执行存储过程或传递给它SQL字符串。 您也可以使用与EXEC相同的完整命令EXECUTE。

    SQL Server中EXEC命令的语法 (Syntax of EXEC command in SQL Server)

    Following is the basic syntax of EXEC command in SQL Server.

    以下是SQL Server中EXEC命令的基本语法。

    --Executing stored procedure
    EXECUTE | EXEC <stored  procedure name>
    WITH <execute_option> 
     
    -- Execting string
    EXECUTE | EXEC ('sql string')
    WITH <execute_option>
    

    To illustrate the examples, I will create a sample stored procedure and table.

    为了说明示例,我将创建一个示例存储过程和表。

    IF EXISTS (SELECT 1 FROM SYS.TABLES where name ='Locations')
    BEGIN 
    DROP TABLE Locations
    END
     
     
    CREATE TABLE [dbo].[Locations](
      [LocationID] [int] NULL,
      [LocationName] [varchar](100) NULL
    ) 
    GO
     
    INSERT INTO Locations values (1,'Richmond Road'),(2,'Brigade Road') ,(3,'Houston Street')
    GO
     
    IF EXISTS (SELECT 1 FROM SYS.procedures where name ='GetLocations')
    BEGIN
    DROP PROCEDURE GetLocations
    END
    GO
     
    CREATE PROCEDURE [GetLocations]
    (@LocID int)
    AS
    BEGIN
     
    select LocationID,LocationName from Locations where LocationID =@LocID
     
    END
    GO
    

    执行存储过程 (Executing a stored procedure)

    To execute a stored procedure using EXEC pass the procedure name and parameters if any. Please refer to the below T-SQL script to execute a stored procedure.

    要使用EXEC执行存储过程,请传递过程名称和参数(如果有)。 请参考下面的T-SQL脚本执行存储过程。

    EXEC GetLocations @LocID = 1
    

    EXEC SQL example of stored procedure

    We can also assign the value returned by a stored procedure to a variable. Please refer to the following example T-SQL script.

    我们还可以将存储过程返回的值分配给变量。 请参考以下示例T-SQL脚本。

    IF EXISTS (SELECT 1 FROM SYS.procedures where name ='GetLocations')
    BEGIN
    DROP PROCEDURE GetLocations
    END
    GO
     
    CREATE PROCEDURE [GetLocations]
    (@LocID int)
    AS
    BEGIN
    declare @i int
    select LocationID,LocationName from Locations where LocationID =@LocID
     
    SET @I =2
    RETURN @I
     
    END
    GO
     
     
    DECLARE @retunr_status int
     
    EXEC @retunr_status = GetLocations @LocID = 1
     
    SELECT @retunr_status AS ReturnStatus
    

    assigning value returned from procedure to a variable using EXECUTE SQL

    执行字符串 (Executing string)

    To execute a string, construct the string and pass it to the EXEC SQL command. Please refer to the below example which executes a string.

    要执行字符串,请构造字符串并将其传递给EXEC SQL命令。 请参考以下示例,该示例执行一个字符串。

    EXEC ('select LocationID,LocationName from locations')
    

    EXECUTE statement with string example

    Following is the example of using EXEC with string constructed from a variable. You always need to enclose the string in the brackets else execute statement consider it as a stored procedure and throws an error as shown in the below image.

    以下是将EXEC与从变量构造的字符串一起使用的示例。 您始终需要将字符串括在方括号中,否则execute语句会将其视为存储过程并引发错误,如下图所示。

    EXEC SQL with variable example

    Constructing a string from the variable and executing it using EXEC SQL command may inject unwanted code. There are some techniques to avoid SQL injection. We will review those techniques in another article.

    从变量构造字符串并使用EXEC SQL命令执行它可能会注入不需要的代码。 有一些技术可以避免SQL注入。 我们将在另一篇文章中回顾这些技术。

    declare @sql varchar(max),@i int
    set @i =3
    SET @sql ='select LocationID,LocationName from locations where LocationID = ' + cast(@i as varchar(10))
    EXEC (@SQL)
    

    EXECUTE string using variable example

    在远程服务器上执行查询 (Executing queries on a remote server)

    AT linked_server_name clause along with EXEC command is used to execute queries on a remote server. A linked server must be configured and RPC Out option must be enabled on the linked server to execute queries on a remote server.

    ATlinked_server_name子句与EXEC命令一起用于在远程服务器上执行查询。 必须配置链接服务器,并且必须在链接服务器上启用RPC Out选项,才能在远程服务器上执行查询。

    Please refer to the following example of executing a query on a remote server. Replace the linked server name with your linked server name.

    请参考以下在远程服务器上执行查询的示例。 用链接服务器名称替换链接服务器名称。

    EXEC ('select name,database_id,db_name() as CurrentDB from sys.databases where database_id <=4') at [TEST01V]
    

    EXEC SQL query on linked server

    If we do not specify the database name, EXEC SQL statement will execute the query on the default database of the login used in the linked server.

    如果未指定数据库名称,则EXEC SQL语句将在链接服务器中使用的登录名的默认数据库上执行查询。

    If you want to execute query in a specific database use “USE databasename” in the query. Please refer to the below example.

    如果要在特定数据库中执行查询,请在查询中使用“ USE databasename”。 请参考以下示例。

     
     EXEC ('use msdb; select name,database_id,db_name() as CurrentDB from sys.databases where database_id <=4') at [TEST01V]
     
    

    EXEC query on linked server

    We can also issue a select query against the remote server using four-part notation. We must enable the Data Access option on the linked server. Please refer to the below example.

    我们还可以使用四部分符号对远程服务器发出选择查询。 我们必须在链接服务器上启用“ 数据访问”选项。 请参考以下示例。

    select name,database_id from [TEST01V].master.sys.databases where database_id <=4
     
    

    To execute a stored procedure on a remote server, use below T-SQL script by replacing the linked server name, database name, and the stored procedure name.

    要在远程服务器上执行存储过程,请使用以下T-SQL脚本替换链接的服务器名称,数据库名称和存储过程名称。

    EXEC ('use testdb; EXEC TestProcedure') at [TEST01V]
    

    Following is the example of executing a stored procedure on the linked server using four-part notation. Here “TEST01V” is the server name, “test” is the database name, and “dbo” is the schema name.

    以下是使用四部分符号在链接服务器上执行存储过程的示例。 这里“ TEST01V”是服务器名称,“ test ”是数据库名称,“ dbo ”是架构名称。

    EXEC [TEST01V].test.dbo.testProc
    

    执行与建议 (EXEC WITH RECOMPILE)

    This execution option in EXEC SQL statement creates a new plan and discards it after using it. If there is an existing plan for the procedure it remains the same in the cache. If there is no existing plan for the procedure and using with recompile option will not store the plan in cache.

    EXEC SQL语句中的此执行选项将创建一个新计划,并在使用后将其丢弃。 如果该过程已有计划,则它在高速缓存中保持不变。 如果该过程没有现有计划,并且与recompile选项一起使用,则不会将该计划存储在缓存中。

    Please refer to the below example for executing the procedure with recompile option. Before executing this I have cleared the plan cache using DBCC FREEPROCCACHE().

    请参考以下示例,执行带有recompile选项的过程。 在执行此操作之前,我已经使用DBCC FREEPROCCACHE()清除了计划缓存。

    exec GetLocations 1 with recompile
    

    After executing the above T-SQL script, I executed the below script to check for the cached plan.

    执行完上面的T-SQL脚本后,我执行了下面的脚本来检查缓存的计划。

    SELECT plan_handle,usecounts, cacheobjtype, objtype, size_in_bytes, text, query_plan
    FROM sys.dm_exec_cached_plans 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
    WHERE text LIKE '%GetLocations%'
    AND objtype = 'Proc'
    

    Please refer to the below image. Executing procedure with recompile option did not store the plan in the cache.

    请参考下图。 使用recompile选项执行的过程未将计划存储在缓存中。

    EXEC SQL example with recompile

    Now, we will execute procedure without recompile which will save the execution plan in cache and after that, we will execute the procedure with recompile option to see if the existing plan is changed or not.

    现在,我们将执行不重新编译的过程,这会将执行计划保存在缓存中,然后,我们将使用recompile选项执行该过程,以查看现有计划是否被更改。

    exec GetLocations 1 
     GO
     
    SELECT plan_handle,usecounts, cacheobjtype, objtype, size_in_bytes, text, query_plan
    FROM sys.dm_exec_cached_plans 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
    WHERE text LIKE '%GetLocations%'
    AND objtype = 'Proc'
     
    GO
     
     exec GetLocations 1 WITH RECOMPILE
     GO
     
     SELECT plan_handle,usecounts, cacheobjtype, objtype, size_in_bytes, text, query_plan
    FROM sys.dm_exec_cached_plans 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
    WHERE text LIKE '%GetLocations%'
    AND objtype = 'Proc'
     
    GO
    

    Please refer to the below image for the result set of the above query. We can see the plan identifier and use counts are the same and the existing plan did not change. EXEC WITH RECOMPILE did not use the existing plan in the cache and created a new plan, used it and discarded it.

    请参阅下图以获取上述查询的结果集。 我们可以看到计划标识符和使用次数相同,并且现有计划未更改。 EXEC WITH RECOMPILE没有使用高速缓存中的现有计划,而是创建了一个新计划,使用了该计划并将其丢弃。

    plan handle with recompile

    用结果集执行 (EXECUTE WITH RESULT SETS )

    This option is used to modify the result set of a stored procedure or the string executed as per the definition specified in the WITH RESULT SETS clause.

    此选项用于修改存储过程的结果集或根据WITH RESULT SETS子句中指定的定义执行的字符串。

    Please refer to the following example of executing a stored procedure with RESULT SETS

    请参考以下使用RESULT SETS执行存储过程的示例

    exec GetLocations 1
     GO
     
     exec GetLocations 1
     WITH RESULT SETS 
    (
    (ID NUMERIC(24,6),LocName varchar(50))
    )
    

    EXEC SQL example with result sets

    We can modify the result set headers and the data type of the column return by executing the stored procedure. This is like using convert (), cast () and column aliases in the normal T-SQL script.

    我们可以通过执行存储过程来修改结果集标题和列返回的数据类型。 这就像在普通的T-SQL脚本中使用convert(),cast()和列别名一样。

    If the procedure or T-SQL string returns more than one result set we must define multiple results sets in the WITH RESULTS SETS clause as well else it will throw following error “EXECUTE statement failed because it’s WITH RESULT SETS clause specified 1 result set(s), and the statement tried to send more result sets than this.”

    如果过程或T-SQL字符串返回多个结果集,则我们还必须在WITH RESULTS SETS子句中定义多个结果集,否则它将引发以下错误:“ EXECUTE语句失败,因为它的WITH RESULT SETS子句指定了1个结果集),该语句尝试发送的结果集要比此多。”

    multiple result set in EXECUTE statement

    Please refer to the following example to use WITH RESULTS SETS clause in EXEC SQL statement for multiple results sets returned by stored procedure or string. In this example, the stored procedure returns two result sets which are the same. I have defined two results in WITH RESULTS SETS clause by changing the datatype and result set headers in both result sets.

    请参考以下示例,以在EXEC SQL语句中将WITH RESULTS SETS子句用于存储过程或字符串返回的多个结果集。 在此示例中,存储过程返回两个相同的结果集。 我通过更改两个结果集中的数据类型和结果集标头在WITH RESULTS SETS子句中定义了两个结果。

    IF EXISTS (SELECT 1 FROM SYS.procedures where name ='GetLocations')
    BEGIN
    DROP PROCEDURE GetLocations
    END
    GO
     
    CREATE PROCEDURE [dbo].[GetLocations]
    (@LocID int)
    AS
    BEGIN
     
    select LocationID,LocationName from Locations where LocationID =@LocID
    select LocationID,LocationName from Locations where LocationID =@LocID
     
    END
    GO
     
    exec GetLocations 1
     WITH RESULT SETS 
    (
    (LocID int,LocName varchar(50)),
    (ID NUMERIC(24,6),LocName varchar(50))
    )
    

    EXECUTE statement with multiple result set in

    结论 (Conclusion)

    We explored different aspects of EXEC SQL Statement with several examples in this article. In case you have any questions, please feel free to ask in the comment section below.

    我们通过本文中的几个示例探索了EXEC SQL语句的不同方面。 如果您有任何疑问,请随时在下面的评论部分中提问。

    翻译自: https://www.sqlshack.com/exec-sql-overview-and-examples/

    exec sql

    展开全文
  • declare @table varchar(20)set @table=準入居者入替declare @SQL Nvarchar(2000)declare @total int set @SQL=select @total=count(*) from +@table + select @totalexec sp_executesql @
    declare  @table  varchar(20)
    
    set  @table='準入居者入替'
    declare  @SQL  Nvarchar(2000)
    declare  @total  int  
    set  @SQL='select    @total=count(*)  from  '  +@table  +  '    select  @total'
    exec  sp_executesql  @sql,N'@total  int  out',@total  out
    print  @total
    展开全文
  • SQL SERVER 执行动态SQL EXEC 1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName...

    SQL SERVER 执行动态SQL EXEC

    1 :普通SQL语句可以用Exec执行
    
    eg:   Select * from tableName
             Exec('select * from tableName')
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 
    
    2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
    
    eg:  
    declare @fname varchar(20)
    set @fname = 'FiledName'
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 
    
    当然将字符串改成变量的形式也可
    declare @fname varchar(20)
    set @fname = 'FiledName' --设置字段名 
    
    declare @s varchar(1000)
    set @s = 'select ' + @fname + ' from tableName'
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 
    
    
    
    declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName'
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 
    
    3. 输出参数
    declare @num int,
            @sqls nvarchar(4000)
    set @sqls='select count(*) from tableName'
    exec(@sqls)
    --如何将exec执行结果放入变量中? 
    
    declare @num int,
                   @sqls nvarchar(4000)
    set @sqls='select @a=count(*) from tableName '
    exec sp_executesql @sqls,N'@a int output',@num output
    select @num

     

    posted @ 2019-03-26 16:08 JinweiChang 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • SqlServer中,用exec处理sql字符串中含有变量,提示:必须声明标量变量@(已解决!) declare @tssj nvarchar(100) -- 外部变量 declare @Sql_Sql nvarchar(100) -- 存sql字符串变量 set @Sql_Sql =N'select @...
  • 摘要1,EXEC的使用2,sp_executesql的使用MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用...
  • SQL Server EXEC和sp_executesql的区别
  • SQL Server exec动态语句详解

    千次阅读 2019-06-05 20:35:45
    exec语句的格式 SQL语句写在括号里面 exec('select * from test') 执行结果: 动态语句写法(实现多条件查询 ) @Dynamic varchar(1000)='',--动态条件 通过调用储存过程传参数 ----------...
  • sqlserverEXEC和sp_executesql使用介绍

    千次阅读 2014-10-12 16:57:05
    sqlserverEXEC和sp_executesql用法区别整理
  • 存储过程的T-SQL语句编译以后可多次执行,由于T-SQL语句不需要重新编译,所以执行存储过程可以 提高性能。存储过程具有以下特点: • 存储过程已在服务器上存储 • 存储过程具有安全特性 • 存储过程允许模块化程序...
  • sql server exec返回值

    2017-03-17 13:55:00
    declare @num int, @sqls nvarchar(4000) set @sqls='select @a=123 ' exec sp_executesql @sqls,N'@a int output',@num output select @num 转载于:https://www.cnblogs.com/zcm123/p/6565733.html
  • sql server exec关键字的用法总结

    千次阅读 2014-06-02 20:28:02
    exec 参数1, 参数2, ....... --不带括号,表示执行存储过程 exec(sql语句) --带括号,表示执行sql语句
  • sql server2008的exec

    2018-11-20 19:50:59
    数据库:sql server2008 情况:表名不确定的情况下,拼接sql并执行,可以使用exec执行(注:执行的sql必须用()括起来) 代码1:(有添加括号,成功) --动态查表名,并查找该表数据 begin declare @tabName ...
  • 赛门铁克Backup Exec 12 for Windows Servers 旨在满足所有规模以Windows 为主的环境需求...Backup Exec 12 Server 产品及其代理按照服务器进行授权许可,与Windows 版本、物理或虚拟硬件以及系统上的处理器数量无关。
  • sqlserver 中的exec问题

    2011-11-01 17:29:34
    如果一个字符串,直接执行没问题,但是要 exec执行就出问题,则用exec(sql),即可解决问题。
  • 前言:在数据库程序开发的过程中,我们经常会碰到利用EXEC来执行一段需要返回某些值的sql语句(通常是构造动态sql语句时使用),或者在一个存储过程中利用EXEC调用另一个有返回值的存储过程(必须获得返回值),那么...
  • 前言:在数据库程序开发的过程中,我们经常会碰到利用EXEC来执行一段需要返回某些值的sql语句(通常是构造动态sql语句时使用),或者在一个存储过程中利用EXEC调用另一个有返回值的存储过程(必须获得返回值),那么...
  • 数据表 tb_HandledJobLog 记录的是已经处理过的数据,该数据表行包含... EXEC(@sql) Fetch next from unitCursor into @Id,@EntityId,@TableName end close unitCursor deallocate unitCursor  
  • 游标遍历exec动态sql语句查询结果

    千次阅读 2013-01-06 14:58:36
    游标比较特殊,可以在EXEC()中创建后再引用,通常用于动态游标.可以这样处理: declare @sql varchar(8000),@table sysname set @table = 'table1' set @sql='DECLARE abc ...exec(@sql) OPEN abc ... 下面
  • Auditing SQL Server SQL Statements

    千次阅读 2016-05-06 20:57:44
    “谁把我的表给删拉”,”谁删了整个表阿”…碰到这种棘手的情况,你如果没有预先做好准备,真的是头都要急炸了。那怎么能抓出这个”凶手...工具虽好,但是也得用得贴合场景才能发挥作用,要不然跟你的SQL Server抢IO,
  • SQLServer : EXEC和sp_executesql的区别

    万次阅读 2012-03-23 18:13:33
     MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这...
  • SQL server Exec中变量的传递declare @sql2 nvarchar(500) , @count int set @sql2 = select @COUNT = 1 execute sp_executesql @sql2, N@COUNT int output, @count output
  • QSqlQuery exec执行SQL语句失败

    万次阅读 2017-06-28 09:51:22
    E:\database_homework\hospital_Server\build-hospital_server-Desktop_Qt_5_2_0_MinGW_32bit-Debug\hospital.db 但实际上我的数据库放在了: E:\database_homework\hospital_Server\hospital_server\hospital....
  • 关于SQL ServerExec实现动态查询语句

    万次阅读 2018-06-23 11:54:15
    Sql Server查询语句中使用变量表示表名、列字段名等动态查询方式 前言 今天看了《SQL Server数据库应用技术》的书,遇到的点疑惑也解决了,顺便分享一下。我本来也要想做一个JSP的动态网页,也要用到这个数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,936
精华内容 51,574
关键字:

execserversql